Hallo,
ich habe bei meiner Transformation von XML in XML ein kleines Problem.
Und zwar wird der Titel aus dem XML-Dokument im Body-Tag ausgegeben, obwohl ich das im XSLT-Dokument
überhaupt nicht schreibe.
Doch das machst du ;-)
Ich dachte erst, dass es ein XPath-Problem ist, aber mit dem XPath-Validator im AltovaXMLSpy habe ich meinen XPath-Ausdruck überprüft.
Kann mir eventuell jemand weiterhelfen.
Ich verstehe einfach nicht, warum der Titel im Body-Tag vor den P-Tags ausgegeben wird.:-/XML:
...
<topic>
<title>Überschrift </title>
<body>
<p>text text</p>
<p>text text text</p>
</body>
</topic>XSLT:
...
<xsl:template match="/">
<topic>
<title>
<xsl:apply-templates select="//title"/>
</title>
<body>
xsl:apply-templates/
</body>
</topic>
</xsl:template>
<xsl:template match="//body/p">
<xsl:value-of select="//p/node()" />
</xsl:template>
...
<xsl:template match="/">
Du selektierst damit das Dokument selbst, dann:
<body>
xsl:apply-templates/
</body>
Damit aktiverst du quasi alles Templates, so auch die build-in Templates vom XSL und weil du im "Dokument" selbst bist, werden hier alle Templates ausgeführt. Zu guter letzt beduetet das, dass der Textinhalt von Elementen ausgeben wird.
Dein <xsl:apply-templates select="//title"/> macht auch nichts anderes als genau das (sofern du kein <template match=title"> hast), nämlich auf die buil-in Templates zu vertrauen und so letztlich den Text vom <title> ausgeben.
Grüße
Thomas
PS: die vielen Selektionen mit "//element" sind wirklich nicht sehr schön, und meistens auch unnötig.