Вам необходимо объявить параметр с помощью xsl:param
в соответствующем шаблоне
<xsl:template match="A/B/D/E/F">
<xsl:param name="XYZ" />
<xsl:text>BLAH-BLAH-BLAH-111</xsl:text>
<xsl:value-of select="$XYZ" />
<xsl:text>BLAH-BLAH-BLAH-999</xsl:text>
</xsl:template>
Однако существует проблема с вашим блоком кода, который выбирает этот шаблон
<xsl:apply-templates select="A/B/D/E/F">
<xsl:with-param name="XYZ" select="$XYZ" >
</xsl:with-param>
xsl:with-param
выбирает имя переменной XYZ
для передачи в качестве параметра, но эта переменная не существует в шаблоне.Возможно, вы ожидаете, что он будет использовать переменную, определенную в шаблоне, соответствующем «A / B / C»?Этого не произойдет, потому что переменные являются локальными по объему для блока, в котором они объявлены.
Возможно, вам нужно написать свой XSLT следующим образом:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:variable name="XYZ">
<xsl:apply-templates select="A/B/C" />
</xsl:variable>
<xsl:apply-templates select="A/B/D/E/F">
<xsl:with-param name="XYZ" select="$XYZ" />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="A/B/C">
<xsl:value-of select="K/L/M/N/O"/>
</xsl:template>
<xsl:template match="A/B/D/E/F">
<xsl:param name="XYZ" />
<xsl:text>BLAH-BLAH-BLAH-111</xsl:text>
<xsl:value-of select="$XYZ" />
<xsl:text>BLAH-BLAH-BLAH-999</xsl:text>
</xsl:template>
</xsl:stylesheet>
Когда вы применяете его кэтот XML
<A>
<B>
<C>
<K>
<L>
<M>
<N>
<O> *** Parameter *** </O>
</N>
</M>
</L>
</K>
</C>
<D>
<E>
<F>Test</F>
</E>
</D>
</B>
</A>
Ниже выводится
BLAH-BLAH-BLAH-111 *** Parameter *** BLAH-BLAH-BLAH-999