N'Abend allerseits...
Tach Uli Ultimativ,
Na ja ist wohl ein altes Problem, aber ich finde keine Lösung im Netz.
Na sowas.....
Wie wärs mit selbermachen? ;-)
Also es geht darum, dass ich ein Buch in XML abgebildet habe...
Hier mal ein kompremierter ausschnitt......
<Chapter>
<Headline>RUP</Headline>
<Chapter>
<Headline>6 best Practices</Headline>
<Paragraph>text</Paragraph>
</Chapter>
<Paragraph>nach Chapter 1</Paragraph>
<Chapter>
<Headline>Phasen</Headline>
<Paragraph>Inception (Konzeptualisierung)
</Chapter>
</Chapter>
<Chapter>
<Headline>Beispiele</Headline>
<Paragraph>Blibla blubb(Konzeptualisierung)
</Chapter>
...So das ist nun mal ein kleiner gekürzter Auschnitt. Ihr müsst Euch vorstellen, dass die Anzahl der Ebenen unbegrenzt ist.
So die Ausgabe soll nun so aussehen:
- RUP
1.1 6 Best Practises
1.2 Phasen- Beispiele
Mein template dafür sieht bis jetzt so aus:
<xsl:template name="inhalt">
<xsl:number value="position()" format="1. "/>
<a><xsl:attribute name="href">#<xsl:value-of select="./Headline/text()"/></xsl:attribute><xsl:value-of select="./Headline/text()"/></a>
<br /><br />
<xsl:for-each select="child::Chapter">
<xsl:call-template name="inhalt" />
</xsl:for-each>
</xsl:template>
Mit Rekursion wird's schwierig, weil die Elemente immer wieder Chapter heißen und nicht Abschnitt1, Abschnitt2 usw.
Der richtige und erstaunlich einfache Lösungsweg führt über das xsl:number-Element:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Headline">
<xsl:number level="multiple" format="1. " count="Chapter"/>
<xsl:value-of select="."/>
xsl:text
</xsl:text>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
Für level musst du "multiple" angeben, was ja selbsterklärend ist und das count()-Attribut gibt an, welche Vorfahren-Elemente bei der Zählung berücksichtigt werde. Und das sind bei dir ja immer die <Chapter>-Elemente. Ausgegeben wird dann zusätzlich die Headline hinter der Nummer.
Gruß
Franz