2012-03-23 49 views
0

可以在同一範圍內使用相同名稱定義兩次xsl:variable。 對於類似下面的代碼:可以使用相同名稱定義兩次xsl:variable

<xsl:template match="\"> 
    <table> 
    <tr><td> 
    <xsl:variable name="status" select="normal"/> 
    </td></tr> 
    <tr><td> 
    <xsl:variable name="status" select="failed"/> 
    </td></tr> 
    </table> 
</xsl:template> 

也許這取決於瀏覽的類型。標準是什麼?

回答

4

首先,兩個變量從來沒有相同的範圍。即使它們都是全局變量,變量的範圍也會排除它自己的選擇表達式,因此這兩個變量的範圍是不同的。

其次,在你的例子中,兩個變量的範圍甚至沒有重疊。每個變量都被限制在它自己的元素中,包含td元素。

對於兩個全局變量,規則是你可以有兩個名稱相同的變量,只要它們有不同的導入優先級,在這種情況下,所有的引用都被視爲在一個具有高優先級的引用。

如果一個變量是本地的,另一個是全球性的,那麼局部變量贏,如果它是在範圍之內。

如果有具有重疊範圍兩個局部變量,這是在XSLT 1.0的誤差,但在XSLT 2.0是允許的;在重疊區域內,範圍較小的變量獲勝。

+0

謝謝邁克爾。我在Reading學習了我的學位,並且深情地記住了它。 – Borodin 2012-03-23 11:32:43

+0

我愛你的第一段,它讓我想起了尼爾斯·玻爾和維爾納·海森堡:D – Fernando 2014-02-28 11:18:43

1

這是一個錯誤,如果兩個或兩個以上的頂級變量(任何模板以外)具有相同的名稱。

同樣是一個錯誤,如果相同的模板中的兩個或多個變量具有相同的名稱。

但是它允許模板內的變量爲shadow頂層同名變量。

變量之間沒有衝突,除非它們的範圍(變量可見的樣式表部分)重疊。模板中的變量範圍包括其以下的同胞元素及其後代。在該變量之後的樣式表中,頂級變量的範圍無處不在。

+0

如果大小寫同名的變量是在不同的節點下麼?我更新簡單的代碼。 – 2012-03-23 07:53:34

+0

@Ji Fang:你確定你知道'xsl:variable'是什麼嗎? – hroptatyr 2012-03-23 08:07:21

+0

我已添加到我的答案。你的例子很好,但是請注意,'status'變量在聲明它的'​​'元素之外是不可見的。 – Borodin 2012-03-23 08:16:59

0

我找到了鑰匙。只有

MSXML 3.0支持XDR架構,它不支持XSD架構。 MSXML 4.0,MSXML 5.0和MSXML 6.0支持XSD架構。

相關問題