Janine: XSL: for-each über concat?

Beitrag lesen

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.

akzeptierte Antworten