XSLT 2.0 - Probleme mit XPath und Variablen

LutzBerillio

Grünschnabel
Hallo alle zusammen,

ich habe hier eine XML-Datei die wie folgt aussieht:

Code:
<?xml version="1.0" encoding="utf-8"?>
<tmx version="1.4">
  <header creationtool="mein tool" srclang="de-DE" o-tmf="xml" segtype="sentence" creationtoolversion="1" adminlang="en" datatype="plaintext">
    <prop type="x-appName">TestApp</prop>
    <prop type="x-appVersion">1</prop>
  </header>
  <body>
    <tu>
      <prop type="x-catalog">Katalog1</prop>
      <prop type="x-version"></prop>
      <prop type="x-meta">Meta1</prop>
      <tuv xml:lang="de-DE">
        <seg>Übersetzung zu Meta1</seg>
      </tuv>
      <tuv xml:lang="en-US">
        <seg>Übersetzung zu Meta1</seg>
      </tuv>
    </tu>
    <tu>
      <prop type="x-catalog">Katalog1</prop>
      <prop type="x-version"></prop>
      <prop type="x-meta">Meta2</prop>
      <tuv xml:lang="de-DE">
        <seg>Übersetzung zu Meta2</seg>
      </tuv>
      <tuv xml:lang="en-US">
        <seg>Übersetzung zu Meta2</seg>
      </tuv>
    </tu>
    <tu>
      <prop type="x-catalog">Katalog2</prop>
      <prop type="x-version"></prop>
      <prop type="x-meta">Meta1</prop>
      <tuv xml:lang="de-DE">
        <seg>Übersetzung zu Meta1</seg>
      </tuv>
      <tuv xml:lang="el-GR">
        <seg>Übersetzung zu Meta1</seg>
      </tuv>
    </tu>
...

und ich versuche gerade über XSL Transformation mir alle Kataloge in allen verfügbaren Sprachen anzeigen zu lassen.

Leider scheitert die Transformation in einem Fehler, den ich mir nicht ganz erklären kann: "Fehler in XPath 2.0-Ausdruck. Kein Node-Element"
Mein XSL Template sieht folgendermaßen aus:

Code:
<xsl:template match="/">

	<xsl:variable name="allCatalogs" select="distinct-values(tmx/body/tu/prop[@type='x-catalog'])" />
	<xsl:variable name="allLanguages" select="distinct-values(tmx/body/tu/tuv/@xml:lang)" />

	<xsl:for-each select="($allCatalogs)">
		<xsl:variable name="actualCatalog" select="." />		

		<xsl:for-each select="($allLanguages)">
			<xsl:variable name="actualLanguage" select="." />
				
			<xsl:for-each select="/tmx/body/tu">
				
				<xsl:if test="prop[attribute::type='x-catalog'] = ($actualCatalog)">

					<xsl:for-each select="tuv">
						<xsl:if test="@xml:lang = ($actualLanguage)">
							<xsl:value-of select="($actualCatalog)" />
							<xsl:value-of select="($actualLanguage)" />
						</xsl:if>
					</xsl:for-each>
				
				</xsl:if>
		
			</xsl:for-each>
		</xsl:for-each>
	</xsl:for-each>
</xsl:template>

Als XSLT-Engine nutze ich Altova XMLSpy 2010 und der Fehler tritt bei <xsl:for-each select="/tmx/body/tu"> auf.

Kann es sein, das mir die Variablen irgendwie den Scope der Schleife verändern? Aber dann müsste ich doch mit einer Abfrage vom Document-Root trotzdem die Elemente erreichen (/tmx/body/tu), oder nicht?

Wäre super wenn mir da jemand auf die Sprünge helfen könnte!

Danke schonmal
 
Zurück