Tobel: Knoten nummerieren

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

Wie stell ich das an?

Gruss,

Tobel

  1. Hallo!

    Rauskommen sollte dann sowas:

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

    Das Kannst Du mit xsl:number/ machen.
    http://selfhtml.teamone.de/xml/darstellung/xsltelemente.htm#number

    MfG, André Laugks

    --
    L-Andre @ gmx.de
  2. 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