0

xml から変数を取得している xsl ファイルがありますが、それらは相互に認識できないようです。私はそれが範囲の問題であることを知っていますが、私が何を間違っているのかわかりません。

<xsl:template match="one">
 <xsl:variable name="varOne" select="@count" />
</xsl:template>

<xsl:template match="two">
 <xsl:if test="$varOne = 'Y'">
     <xsl:value-of select="varTwo"/>
 </xsl:if>
</xsl:template>

ここでは単純化されています。

どんな助けでも大歓迎です。

4

4 に答える 4

3

パラメータを渡すことで、スコープの問題を解決することもできます...

<xsl:apply-templates select="two">
 <xsl:with-param name="varOne">
  <xsl:value-of select="one/@count"/>
 </xsl:with-param>
</xsl:apply-templates>

<xsl:template match="two">
 <xsl:param name="varOne"/>
 <xsl:if test="$varOne = 'Y'">
     <xsl:value-of select="varTwo"/>
 </xsl:if>
</xsl:template>
于 2008-09-26T19:35:44.287 に答える
2

XSLT の変数のスコープは、それを囲む要素です。変数を複数の要素から見えるようにするには、変数の宣言がそれらの要素と同じレベルかそれ以上である必要があります。

于 2008-09-27T02:10:50.187 に答える
2

変数にはスコープが設定されているため、ある変数を宣言してから別の変数で使用することはできません。変数宣言をテンプレートの外に移動して、両方のスコープよりも高いスコープにする必要があります。

于 2008-09-26T19:14:53.543 に答える
2

xsl 変数は不変であることを思い出してください...

<!-- You may want to use absolute path -->
<xsl:variable name="varOne" select="one/@count" />

<xsl:template match="one">
<!-- // do something --> 
</xsl:template>

<xsl:template match="two">
 <xsl:if test="$varOne = 'Y'">
     <xsl:value-of select="varTwo"/>
 </xsl:if>
</xsl:template>
于 2008-09-26T19:23:33.117 に答える