2008-09-26 59 views
0

我有一个xsl文件,它从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> 

这里已经简化了。

任何帮助表示赞赏。

回答

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> 
+0

不可变可能是比静态final更好的术语。 – Kev 2008-09-26 19:51:17

2

我很确定变量是有作用域的,因此你不能在一个变量中声明一个变量,然后在另一个变量中使用它。你将不得不将变量声明移出模板,以便它们的范围比两者都高。

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> 
2

在XSLT变量的作用域是其封闭元件。要使变量对多个元素可见,其声明必须与这些元素处于同一级别或更高级别。