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