fjh: Knoten nummerieren

Beitrag lesen

Hallo,

Ich würde gerne alle Absatz Elemente meiner XML Datei durchnummerieren, dabei können Sie sich auf verschieden tiefen Ebenen befinden:

<root>
<element>
  <absatz>erster absatz</absatz>
  <element>
   <absatz>zweiter absatz</absatz>
  </element>
</element>
<element>
  <absatz>dritter absatz</absatz>
</element>
</root>

Rauskommen sollte dann sowas:

  1. erster Absatz
  2. zweiter Absatz
  3. dritter Absatz

Wenn die Ebene des <absatz>-Elements sich nicht in Deinem Inhaltsverzeichnis wiederspiegeln soll, dann geht es recht einfach z.B. so:

<xsl:template match="/">
    <html>
      <head>
        <title>Inhaltsverzeichnis</title>
      </head>
      <body>
        <xsl:for-each select="//absatz">
          <p>
           <xsl:value-of select="position()"/>.<xsl:value-of select="."/>
         </p>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>

Mit xsl:number geht's natürlich genauso. In der Regel ist position() allerdings performanter. Falls du allerdings hierarchische Nummerierung möchtest (1.,1.1), musst du xsl:number nehmen.

Für Dein Beispiel etwa so:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
     version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
    <html>
      <head>
        <title>Inhaltsverzeichnis</title>
      </head>
      <body>
        xsl:apply-templates/
      </body>
    </html>
  </xsl:template>

<xsl:template match="absatz">
    <p>
      <xsl:number level="multiple" format="1." count="element" />
      <xsl:value-of select="."/>
    </p>
  </xsl:template>

<xsl:template match="text()"/>

</xsl:stylesheet>

Gruß
Franz