0

我有一个 xsl 文件,它从 xml 中获取变量,它们似乎无法看到对方。我知道这是一个范围问题,我只是不知道我做错了什么。

<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

我相当确定变量是有范围的,因此您不能在一个变量中声明一个变量,然后在另一个变量中使用它。您将不得不将变量声明移出模板,以便它位于比它们都更高的范围内。

于 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 回答
2

XSLT 中变量的范围是它的封闭元素。要使变量对多个元素可见,其声明必须与这些元素处于相同级别或更高级别。

于 2008-09-27T02:10:50.187 回答