2011-09-13 84 views
1

我有一個變量:
重新初始化變量XSLT

<xsl:variable name="code" select="F2"/> 

我可以重新初始化其他地方在我的代碼?可能嗎?
我需要保存當前的節點,並決定是否駁回,或通過英寸

回答

2

的xsl:變量不能被重新分配「明確」,儘管它們的範圍被限制在當前的構建體(例如XSL:模板或的xsl:for-每個)等將'重新初始化「,因爲它會遍歷下一個'每個'。

的xsl:變量可以指向的節點,即

<xsl:variable name="someNodeVar" select="xpathToElement"/> 

,然後使用例如

<xsl:value-of select="$someNodeVar/relativeXpathGoesHere/text()"/> 
3

一旦您設置一個變量的值,你不能改變或修改 價值!

參考:http://www.w3schools.com/xsl/el_variable.asp

+0

@_Kirill舒克:W3Schools的或任何其他非W3C源不是規範權威,不應該被引用。事實上,有時候w3schools中的解釋並不完全正確,而且相當有疑問。這個具體的報價並不完美。 –

2

XSLT是一種功能語言。在功能語言變量中,一旦給定值,就不能修改

通過在模板中使用xsl:param併爲該參數傳入新模板的新值,可以達到與修改變量相同的效果。

下面是一個簡短和完整的例子

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="nums"> 
    <xsl:call-template name="sum"/> 
</xsl:template> 

<xsl:template name="sum"> 
    <xsl:param name="pList" select="*"/> 
    <xsl:param name="pAccum" select="0"/> 

    <xsl:choose> 
    <xsl:when test="not($pList)"> 
    <xsl:value-of select="$pAccum"/> 
    </xsl:when> 
    <xsl:otherwise> 
    <xsl:call-template name="sum"> 
     <xsl:with-param name="pList" 
      select="$pList[position() > 1]"/> 
     <xsl:with-param name="pAccum" select="$pAccum+$pList[1]"/> 
    </xsl:call-template> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 
</xsl:stylesheet> 

當該轉化此XML文檔上施加:

<nums> 
    <num>01</num> 
    <num>02</num> 
    <num>03</num> 
    <num>04</num> 
    <num>05</num> 
    <num>06</num> 
    <num>07</num> 
    <num>08</num> 
    <num>09</num> 
    <num>10</num> 
</nums> 

正確的結果產生

55 

請注意如何參數被「修改」 :)