Guten Abend zusammen,
ich hänge mal wieder an einem kleinen XSL-Problem und habe folgenden Ausgangscode:
<?xml version="1.0" encoding="UTF-8"?>
<mycode>
<text>
<de>Hier steht mein Text mit einer <a href="Link1">Verlinkung</a> drin.</de>
<en>Here is my text with a <a href="Link1">link</a> in it.</en>
</text>
<text>
<de>Hier steht mein Text mit einer <a href="Link1">Verlinkung</a> und noch einem zweiten <a href="Link2">Link</a> drin.</de>
<en>Here is my text with a <a href="Link1">link</a> and a second <a href="Link2">link</a> in it.</en>
</text>
</mycode>
Ausgabe soll sein:
<?xml version="1.0" encoding="UTF-8"?>
<mycode>
<text>
<de>Hier steht mein Text mit einer <a href="Link1_de.html">Verlinkung</a> drin.</de>
<en>Here is my text with a <a href="Link1_en.html">link</a> in it.</en>
</text>
<text>
<de>Hier steht mein Text mit einer <a href="Link1_de.html">Verlinkung</a> und noch einem zweiten <a href="Link2_de.html">Link</a> drin.</de>
<en>Here is my text with a <a href="Link1_en.html">link</a> and a second <a href="Link2_en.html">link</a> in it.</en>
</text>
</mycode>
Leider bin ich an diesem XSLT mal wieder über der Schleife abgestorben... Irgendwie immer, das Konstrukt will einfach nicht in meinen Kopf rein :( Habt ihr Vorschläge? Gerne nehme ich auch Hinweise zur Codeoptimierung an. Sollte ich bei der Verlinkung mit einem zweiten Template arbeiten, um den Code für de und en nicht doppelt schreiben zu müssen? Dann muss ich allerdings beim Parameter xsl:copy-of verwenden, anstatt xsl:value-of, damit der gesamte Knoten <de> samt Kindknoten übernommen wird, oder?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="#all" version="2.0">
<xsl:output method="xml" encoding="UTF-8"/>
<xsl:template match="/">
<mycode>
<xsl:for-each select="/mycode/text">
<text>
<de>
<xsl:choose>
<xsl:when test="de/a">
<xsl:value-of select="de/text()[1]"/>
<a>
<xsl:attribute select="fn:concat(de/a[1]/@href, '_de.html')" name="href"/>
<xsl:value-of select="de/a[1]/text()"/>
</a>
<xsl:value-of select="de/text()[2]"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="de"/>
</xsl:otherwise>
</xsl:choose>
</de>
<en>
<xsl:choose>
<xsl:when test="en/a">
<xsl:value-of select="en/text()[1]"/>
<a>
<xsl:attribute select="fn:concat(en/a[1]/@href, '_en.html')" name="href"/>
<xsl:value-of select="en/a[1]/text()"/>
</a>
<xsl:value-of select="en/text()[2]"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="en"/>
</xsl:otherwise>
</xsl:choose>
</en>
</text>
</xsl:for-each>
</mycode>
</xsl:template>
</xsl:stylesheet>
Ich freue mich über eure Hilfe! Viele Grüße, Janine