Thomas J.S.: XSLT / XML to XML / Output / XPath?

Beitrag lesen

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.