我有一个从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>
这里已经简化了。
感谢任何帮助。
答案 0 :(得分: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>
答案 1 :(得分:2)
我很确定变量是作用域的,因此你不能在一个变量中声明变量然后在另一个变量中使用变量。您将不得不将变量声明移出模板,以使其比两者都更高。
答案 2 :(得分: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>
答案 3 :(得分:2)
XSLT中变量的范围是它的封闭元素。要使变量对多个元素可见,其声明必须与这些元素处于同一级别或更高级别。