Hallo,
ich will über folgende Quelldaten eine For-Each-Schleife, abhängig von der Sprachvariablen, legen, sodass entweder A-B-C oder D-E-F rauskommt.
<data>
<roles_de>
<role>A</role>
<role>B</role>
<role>C</role>
</roles_de>
<roles_en>
<role>D</role>
<role>E</role>
<role>F</role>
</roles_en>
</data>
Dieser XSL-Code funktioniert prima:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/">
<allroles>
<xsl:for-each select="/data/roles_de/role">
<role>
<xsl:value-of select="."/>
</role>
</xsl:for-each>
</allroles>
</xsl:template>
</xsl:stylesheet>
Wenn ich nun aber folgendes schreibe, funktioniert das for-each nicht mehr:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/">
<xsl:variable name="lang">de</xsl:variable>
<xsl:variable name="eachrole" select="concat('/data/roles_', $lang, '/role')"/>
<roles>
<xsl:for-each select="$eachrole">
<roles>
<xsl:value-of select="."/>
</roles>
</xsl:for-each>
</roles>
</xsl:template>
</xsl:stylesheet>
Die Fehlermeldung sagt, dass ein Knoten erwartet wird, das aktuelle Element allerdings vom Typ xs:string ist. Doch auch wenn ich nur einen Teil in die Variable speichere (concat('/data/roles_', $lang)
) und "/role"
anfüge, bekomme ich keinen Knoten.
Gibt es für mein Problem eine Lösung? Bin für Ideen und Hinweise, wo mein Denkfehler liegt, sehr dankbar!
Viele Grüße, Janine.
PS: Eine choose-Abfrage kommt nur infrage, wenn es keine bessere Alternative gibt, da beide Dateien sehr komplex sind und ich den Code ungern unnötig aufblähen möchte.