Frederik: position() bringt das doppelte des erwarteten Wertes

Beitrag lesen

Hallo!

Gerade bin ich dabei, für eine Website ein XSLT zu schreiben, dass einfache HTML-Seiten mit einem Menü und etwas drumherum anreichert. Die Informationen über das Menü sind in einer Datei structure.xml gespeichert, die wie folgt aufgebaut ist:

<?xml version="1.0" encoding="ISO-8859-1"?>  
<!DOCTYPE site SYSTEM "/usr/local/share/dtds/site.dtd">  
<site>  
 <pages>  
  <page id="index">  
   <title>Startseite</title>  
  </page>  
  <page id="nrzwei">  
   <title>Eine zweite Seite</title>  
   <pages>  
    <page id="unterseite">  
     <title>Erste Unterseite</title>  
    </page>  
    <page id="unterseitezwo">  
     <title>Zweite Unterseite</title>  
    </page>  
   </pages>  
  </page>  
  <page id="nrdrei">  
   <title>Und die dritte Seite</title>  
  </page>  
 </pages>  
</site>

Nun wollte ich auslesen, an welcher Stelle eine Menüeintrag steht, weil der erste etwas anders formatiert werden soll. Mein Problem: Der ausgegebene Wert ist genau doppelt so hoch, wie ich es erwarten würde.

Ich habe zum Testen mal ein minimal-XSLT geschrieben, das das Verhalten auch zeigt:

  
<?xml version="1.0" encoding="iso-8859-1"?>  
<xsl:stylesheet  
 version="2.0"  
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  
 xmlns:html="http://www.w3.org/1999/xhtml"  
 xmlns="http://www.w3.org/1999/xhtml"  
 exclude-result-prefixes="#default">  
 <xsl:output  
  doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"  
  doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"  
  indent="yes"  
  method="xml"  
  omit-xml-declaration="yes"  
  encoding="iso-8859-1" />  
  
 <xsl:template match="/">  
  <xsl:apply-templates />  
 </xsl:template>  
  
 <xsl:template match="page">  
  <xsl:value-of select="position()"/><xsl:text>: </xsl:text><xsl:value-of select="@id"/>  
  <xsl:apply-templates />  
 </xsl:template>  
</xsl:stylesheet>

Das Ergebnis ist:

  
  2: index  
   Startseite  
  
  4: nrzwei  
   Eine zweite Seite  
  
    2: unterseite  
     Erste Unterseite  
  
    4: unterseitezwo  
     Zweite Unterseite  
  
  
  
  6: nrdrei  
   Und die dritte Seite

Dabei hätte ich jetzt 1, 2, 1, 2, 3 erwartet.

Kann mir vielleicht jemand auf die Sprünge helfen, was ich da falsch mache? Dafür wäre ich sehr dankbar!

Liebe Grüße
Frederik