2008-09-26 92 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變量的作用域是其封閉元件。要使變量對多個元素可見,其聲明必須與這些元素處於同一級別或更高級別。