-----Original Message-----
From: Huditsch Roman [mailto:Roman(_dot_)Huditsch(_at_)lexisnexis(_dot_)at]
Sent: 01 February 2005 08:24
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Grouping in XSLT 2.0 with multiple grouping levels
Hi,
Ok, I'll do my best in trying to explain my use case.
I have to transform source files produced via the Upcast
conversion tool
into XML files valid to a given XML Schema.
My input files have a flat and arbitrary structure.
Here is a sample input file:
<?xml version="1.0" encoding="ISO-8859-1"?>
<document>
<part style="page: pageStyle1;">
<section level="1">
<heading class="02_BDGesBlatt"
level="1">bundesgesetzblatt</heading>
<par class="03_RepOesterr">für die
republik österreich</par>
<par class="04_AusgabeDaten">Jahrgang
2004 Ausgegeben am 30. Dezember 2004 Teil I</par>
<par class="05_Kurztitel">180.
Bundesgesetz: <inline style="color:
#000000;">Abgabenänderungsgesetz 2004 - AbgÄG 2004</inline>
</par>
<par class="05_Kurztitel">(NR: GP XXII
RV 686 AB 734 S. 89. BR: 7160 AB 7184 S. 717.)</par>
<par class="05_Kurztitel">[CELEX-Nr.:
32003L0030, 32003L0096]</par>
<par class="11_Titel" style="color:
#000000; ">180. Bundesgesetz, mit dem das
Einkommensteuergesetz 1988, das Körperschaftsteuergesetz
1988, das Umgründungssteuergesetz, das Umsatzsteuergesetz
1994, das Gesundheits- und Sozialbereich-Beihilfengesetz
1996, das Internationale Steuervergütungsgesetz, das
Gebührengesetz 1957, das Konsulargebührengesetz 1992, das
Investmentfondsgesetz 1993, das EU-Quellensteuergesetz, das
EG-Amtshilfegesetz, das Normverbrauchsabgabegesetz, das
Mineralölsteuergesetz 1995, das Kommunalsteuergesetz 1993,
das Neugründungs-Förderungsgesetz, die Bundesabgabenordnung,
das Abgabenverwaltungsorganisationsgesetz, das
Zollrechts-Durchführungsgesetz, das Finanzstrafgesetz, das
Bewertungsgesetz 1955, das Erbschafts- und
Schenkungssteuergesetz 1955 sowie das Bundesbahngesetz
geändert werden (Abgabenänderungsgesetz 2004 - AbgÄG 2004)</par>
<par class="12_PromKl_EinlSatz">Der
Nationalrat hat beschlossen:</par>
<par class="42_UeberschrG1-">Artikel I</par>
<par class="43_UeberschrG2">Änderung
des Einkommensteuergesetzes 1988</par>
<par class="12_PromKl_EinlSatz">Das
Einkommensteuergesetz 1988, BGBl. Nr. 400, zuletzt geändert
durch das Bundesgesetz BGBl. I Nr. 57/2004, wird wie folgt
geändert:</par>
<par class="21_NovAo1">1. In § 3 Abs. 1
Z 17 wird folgender Satz angefügt:</par>
<par
class="23_Satz_(nach_Novao)">"Gutscheine für Mahlzeiten
bleiben bis zu einem Wert von 4,40 Euro pro Arbeitstag
steuerfrei, wenn die Gutscheine nur am Arbeitsplatz oder in
einer nahe gelegenen Gaststätte zur dortigen Konsumation
eingelöst werden. Können die Gutscheine auch zur Bezahlung
von Lebensmitteln verwendet werden, die nicht sofort
konsumiert werden müssen, sind sie bis zu einem Betrag von
1,10 Euro pro Arbeitstag steuerfrei."</par>
<par class="14_Abs">In der Novelle 1839
wird der Inhalt nich geändert.</par>
<par class="22_NovAo2">2. In § 4 Abs. 4
Z 5 tritt an die Stelle der Wortfolge <inline
class="992_Normal">"der Finanzlandesdirektion"</inline> die
Wortfolge <inline class="992_Normal">"des Finanzamtes Wien
1/23"</inline>.</par>
<par class="21_NovAo1">3. § 4 Abs. 4 Z
7 lautet:</par>
<par
class="52_Ziffer_e1">"7.Aufwendungen für Aus- und
Fortbildungsmaßnahmen im Zusammenhang mit der vom
Steuerpflichtigen ausgeübten oder einer damit verwandten
beruflichen Tätigkeit und Aufwendungen für umfassende
Umschulungsmaßnahmen, die auf eine tatsächliche Ausübung
eines anderen Berufes abzielen. Aufwendungen für Nächtigungen
sind jedoch höchstens im Ausmaß des den Bundesbediensteten
zustehenden Nächtigungsgeldes der Höchststufe bei Anwendung
des § 13 Abs. 7 der Reisegebührenvorschrift zu berücksichtigen."</par>
<par class="68_UnterschrL"
xml:lang="en" style="word-break-inside: hyphenate; ">Fischer</par>
<par class="68_UnterschrL"
xml:lang="en" style="word-break-inside: hyphenate; ">Schüssel</par>
</section>
</part>
</document>
Ok, so far so good. Having such an input file, I need to
group various elements (with <xsl:for-each-group starting-with>).
At the end I would like to get a file like:
<document>
<part style="page: pageStyle1;">
<section level="1">
<heading class="02_BDGesBlatt"
level="1">bundesgesetzblatt</heading>
<par class="03_RepOesterr">für die
republik österreich</par>
<par class="04_AusgabeDaten">Jahrgang
2004 Ausgegeben am 30. Dezember 2004 Teil I</par>
<par class="05_Kurztitel">180.
Bundesgesetz: <inline style="color:
#000000;">Abgabenänderungsgesetz 2004 - AbgÄG 2004</inline>
</par>
<par class="05_Kurztitel">(NR: GP XXII
RV 686 AB 734 S. 89. BR: 7160 AB 7184 S. 717.)</par>
<par class="05_Kurztitel">[CELEX-Nr.:
32003L0030, 32003L0096]</par>
<par class="11_Titel" style="color:
#000000; ">180. Bundesgesetz, mit dem das
Einkommensteuergesetz 1988, das Körperschaftsteuergesetz
1988, das Umgründungssteuergesetz, das Umsatzsteuergesetz
1994, das Gesundheits- und Sozialbereich-Beihilfengesetz
1996, das Internationale Steuervergütungsgesetz, das
Gebührengesetz 1957, das Konsulargebührengesetz 1992, das
Investmentfondsgesetz 1993, das EU-Quellensteuergesetz, das
EG-Amtshilfegesetz, das Normverbrauchsabgabegesetz, das
Mineralölsteuergesetz 1995, das Kommunalsteuergesetz 1993,
das Neugründungs-Förderungsgesetz, die Bundesabgabenordnung,
das Abgabenverwaltungsorganisationsgesetz, das
Zollrechts-Durchführungsgesetz, das Finanzstrafgesetz, das
Bewertungsgesetz 1955, das Erbschafts- und
Schenkungssteuergesetz 1955 sowie das Bundesbahngesetz
geändert werden (Abgabenänderungsgesetz 2004 - AbgÄG 2004)</par>
<par class="12_PromKl_EinlSatz">Der
Nationalrat hat beschlossen:</par>
<42_UeberschrG1>
<titel>Artikel I</titel>
<43_UeberschrG2>
<titel>Änderung des
Einkommensteuergesetzes 1988</titel>
<par
class="12_PromKl_EinlSatz">Das Einkommensteuergesetz 1988,
BGBl. Nr. 400, zuletzt geändert durch das Bundesgesetz BGBl.
I Nr. 57/2004, wird wie folgt geändert:</par>
<NovAo>
<absatz>1. In §
3 Abs. 1 Z 17 wird folgender Satz angefügt:</absatz>
<23_Satz_(nach_Novao)>"Gutscheine für Mahlzeiten bleiben bis
zu einem Wert von 4,40 Euro pro Arbeitstag steuerfrei, wenn
die Gutscheine nur am Arbeitsplatz oder in einer nahe
gelegenen Gaststätte zur dortigen Konsumation eingelöst
werden. Können die Gutscheine auch zur Bezahlung von
Lebensmitteln verwendet werden, die nicht sofort konsumiert
werden müssen, sind sie bis zu einem Betrag von 1,10 Euro pro
Arbeitstag steuerfrei."</23_Satz_(nach_Novao)>
</NovAo>
<par class="14_Abs">In
der Novelle 1839 wird der Inhalt nich geändert.</par>
<NovAo>
<absatz>2. In §
4 Abs. 4 Z 5 tritt an die Stelle der Wortfolge <inline
class="992_Normal">"der Finanzlandesdirektion"</inline> die
Wortfolge <inline class="992_Normal">"des Finanzamtes Wien
1/23"</inline>.</absatz>
</NovAo>
<NovAo>
<absatz>3. § 4
Abs. 4 Z 7 lautet:</absatz>
<52_Ziffer_e1>"7.Aufwendungen für Aus- und
Fortbildungsmaßnahmen im Zusammenhang mit der vom
Steuerpflichtigen ausgeübten oder einer damit verwandten
beruflichen Tätigkeit und Aufwendungen für umfassende
Umschulungsmaßnahmen, die auf eine tatsächliche Ausübung
eines anderen Berufes abzielen. Aufwendungen für Nächtigungen
sind jedoch höchstens im Ausmaß des den Bundesbediensteten
zustehenden Nächtigungsgeldes der Höchststufe bei Anwendung
des § 13 Abs. 7 der Reisegebührenvorschrift zu
berücksichtigen."<52_Ziffer_e1>
</NovAo>
</43_UeberschrG2>
</42_UeberschrG1>
<par class="68_UnterschrL"
xml:lang="en" style="word-break-inside: hyphenate; ">Fischer</par>
<par class="68_UnterschrL"
xml:lang="en" style="word-break-inside: hyphenate; ">Schüssel</par>
</section>
</part>
</document>
All elements in the source document containing "NovAo" should
be treated identically.
There are of course other elements which need to be grouped,
but for a better understanding
I have put them out of the source file.
I managed to come up with a working version, but I am sure
there are a lot of problems in it.
I decided to split up the entire transformation in multiple
stylesheets where each of them groups
another element. I thought that would be best because I can't
rely on any element existing in my
source document and some elements like "NovAo" need special care.
How would you deal with such requirements?
How should a stylesheet doing such transformations look like?
I first tried to write a template for "section" and do the
grouping there,
but that didn't work out, since I don't want every child
element to be grouped...
Every help is very much appreciated!
I first wanted to send you one of my stylesheets,
but I am doing other element conversions as well, so it
wouldn't produce the simple structure shown above...
wbr,
Roman
-----Ursprüngliche Nachricht-----
Von: Michael Kay [mailto:mike(_at_)saxonica(_dot_)com]
Gesendet: Dienstag, 1. Februar 2005 01:08
An: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Betreff: RE: [xsl] from start tag A to end tag B
Is there any resource showing some sophisticated grouping
solutions
using XSLT 2.0?
I just take a look at Michael's XSLT 2.0 reference, but I
need some
examples with a more complex and felxible structure...
I think you need to post a problem and we'll see what we can
do to provide a solution.
I could write an essay on recursive grouping but it might be
addressing a problem that you haven't got...
Michael Kay
http://www.saxonica.com/
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--