xsl作用域帮助
时间:2020-03-06 14:48:05 来源:igfitidea点击:
我有一个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>
此处已对此进行了简化。
任何帮助表示赞赏。
解决方案
我相当确定变量是有作用域的,因此我们不能在一个变量中声明一个变量,然后在另一个变量中使用它。我们将必须将变量声明移出模板,以使其在比两者都更高的范围内。
记住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>
我们还可以通过传递参数来解决一些范围界定问题...
<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>
XSLT中变量的范围是其封闭元素。为了使变量对多个元素可见,其声明必须与这些元素处于同一级别或者更高级别。