fjh: Nummeriertes Inhaltsverzeichnis erstellen

Beitrag lesen

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:

  1. RUP
    1.1 6 Best Practises
    1.2 Phasen
  2. 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&#xa;</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