sanovision
Grünschnabel
Hi,
ich muss mittels XSLT2.0 aus einer sequentiellen Struktur eine hierarchische produzieren.
Die Hierarchieinformation kommt aus dem Attribut "hier" welches den Titel des Elternkapitel enthält :
Das Ganze soll dann so aussehen:
ich habe zwar einen umständlichen Weg gefunden, der hat aber den Nachteil, dass die Hierarchietiefe vom Stylesheet abhängig ist.
Dabei schaut das Stylesheet bei der Produktion eines Kapitels, ob es nachfolgende Kapitel mit einem Attribut "hier" gibt, die den gleichen Wert wie der Titel des gegenwärtigen Kapitels haben.
Für jede Schachtelungstiefe muss das Stylesheet nachsehen, ob es eventuell Unterkapitel gibt. So schaut das stylesheet aus:
Hat jemand eine Idee wie man das sauberer löst, so dass nicht für jede Schachtelungstiefe wieder eine For-Each-Schleife gebaut werden muss?
ich muss mittels XSLT2.0 aus einer sequentiellen Struktur eine hierarchische produzieren.
Die Hierarchieinformation kommt aus dem Attribut "hier" welches den Titel des Elternkapitel enthält :
Code:
<kap>
<title>Kapitel 1</title>
Hier steht der Text</kap>
<kap>
<title>Kapitel 2</title>
Hier steht der Text
</kap>
<kap hier="Kapitel 2">
<title>Kapitel 2.1</title>
Hier steht der Text
</kap>
<kap hier="Kapitel 2">
<title>Kapitel 2.2</title>
Hier steht der Text
</kap>
<kap hier="Kapitel 2.2">
<title>Kapitel 2.2.1</title>
Hier steht der Text
</kap>
<kap hier="Kapitel 2.2">
<title>Kapitel 2.2.2</title>
Hier steht der Text
</kap>
<kap>
<title>Kapitel 3</title>
Hier steht der Text
</kap>
Code:
<kap title="Kapitel 1"/>
<kap title="Kapitel 2">
<kap title="Kapitel 2.1"/>
<kap title="Kapitel 2.2">
<kap title="Kapitel 2.2.1"/>
<kap title="Kapitel 2.2.2"/>
</kap>
</kap>
<kap title="Kapitel 3"/>
ich habe zwar einen umständlichen Weg gefunden, der hat aber den Nachteil, dass die Hierarchietiefe vom Stylesheet abhängig ist.
Dabei schaut das Stylesheet bei der Produktion eines Kapitels, ob es nachfolgende Kapitel mit einem Attribut "hier" gibt, die den gleichen Wert wie der Titel des gegenwärtigen Kapitels haben.
Für jede Schachtelungstiefe muss das Stylesheet nachsehen, ob es eventuell Unterkapitel gibt. So schaut das stylesheet aus:
Code:
<xsl:for-each select="root/*">
<!--
1. EBENE
testet ob das Topic KEIN "hier"-Attribut hat, also auf oberster Ebene steht. -->
<xsl:if test="not(@hier)">
<xsl:variable name="kap1" select="./title" />
<kap>
<xsl:attribute name="title">
<xsl:value-of select="./title" />
</xsl:attribute>
<!--
2.EBENE
testet, ob es Topics im Dokument gibt, die ein "hier"
Att haben, dass den selben Inhalt hat wie der gegenwärtige Topic-Titel hat. -->
<xsl:for-each select="//* [@hier = $kap1]">
<xsl:variable name="kap2" select="./title" />
<kap>
<xsl:attribute name="title">
<xsl:value-of select="./title" />
</xsl:attribute>
<!--
3.EBENE
-->
<xsl:for-each select="//* [@hier = $kap2]">
<xsl:variable name="kap3" select="./title" />
<kap>
<xsl:attribute name="title">
<xsl:value-of select="./title" />
</xsl:attribute>
<!--
4.EBENE
-->
<xsl:for-each
...
...
...