2016-06-22 67 views
1

我知道一旦初始化XSLT變量就不能更改它們各自的值。
撒克遜PE 9.2.0.6允許的語法如下:在同一範圍內聲明多個相同名稱的XSLT變量

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="text" /> 
    <xsl:template match="/"> 
     <xsl:variable name="myVar" select="'asdex upgrade'" /> 
     <xsl:value-of select="$myVar" /><xsl:text>&#xA;</xsl:text> 
     <xsl:variable name="myVar" select="'Wendelstein'" /> 
     <xsl:value-of select="$myVar" /><xsl:text>&#xA;</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 

與此輸出:

asdex upgrade 
Wendelstein 

所以這裏發生了什麼?很顯然,這段代碼與變量在XSLT中不可變的事實並不矛盾,否則Saxon處理器不會處理它。我在這裏創建了兩個具有相同名稱的變量(其範圍侷限於給定的模板)?如果是這樣,我是否有辦法在創建第二個變量後訪問第一個變量,或者它是否停止存在,或者它在XSLT處理器的符號表中被掩蓋了?或者是什麼給了?

感謝您的任何啓示!

回答

2

參見https://www.w3.org/TR/xslt20/#scope-of-variables的詳細說明,它說明了

對於任何可變結合元件,有一個區域(更 具體地說,一組元素節點)的樣式表的其內 的結合是可見的。 XPath表達式的範圍內的變量綁定集包含樣式表中發生表達式的 點處可見的那些綁定。

局部變量綁定元素是所有以下的兄弟姐妹 及其後代可見,有兩個例外:它不是在它被另一個變量綁定陰影任何 區域可見,並且它不是在以xsl:fallback指令爲根的子樹內可見的 , 是變量綁定元素的同級。對於xsl:variable或xsl:param元素本身,綁定不是 。

[定義:如果綁定發生在另一個綁定可見的位置,並且綁定具有相同名稱 的位置,則綁定會隱藏另一個綁定。 ]如果由局部xsl:變量或xsl:param建立的綁定影響全局綁定,則不會發生錯誤。在此 的情況下,全局綁定在 樣式表的區域中將不可見,其中該區域被其他綁定隱藏。

所以第二個xsl:variable name="myVar"影子第一個。

+0

啊,謝謝。該規範說得很清楚。感謝您的鏈接,我顯然必須在那裏閱讀。 – rexford

相關問題