2011-02-08 112 views
1

需要一個我可以從任何模板訪問的變量。文件作用域變量

我在總是調用的文件開始處有一個全局模板。我希望能夠在運行apply-templates時調用的模板中訪問此變量。

這可能嗎?

謝謝!

編輯:這是我的問題的一個很好的總結。我有各種各樣的模板被調用(以各種順序)。他們把表單控件放在頁面上。我希望通過使用索引來引用XML中的一組數據。每次我點擊其中一個模板並打算創建一個論壇控件時,我希望能夠使用這個「全局」變量作爲計數器。

+1

這聽起來像是你將XSLT與各種其他編程語言混淆了。 – 2011-02-08 01:39:41

+0

編輯您的帖子並顯示您的XSLT示例,指出「全局模板」的含義以及與「變量」相關的方式。 – 2011-02-08 04:04:05

回答

1

需要一個變量我可以從任何模板 訪問。

XSLT語言提供了global variables(稱爲頂級變量)。

每個<xsl:variable>,它是<xsl:stylesheet>的孩子是全局的,可以從任何模板或從完整導入樹中的任何其他全局變量訪問。

這是一個小例子。這種轉變

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:variable name="vMyVar" select="3"/> 

<xsl:template match="/"> 
    From template matching '/': "<xsl:text/> 

    <xsl:value-of select="$vMyVar"/>" 
    <xsl:call-template name="template2"/> 
</xsl:template> 

<xsl:template name="template2"> 
    From template2: "<xsl:text/> 

    <xsl:value-of select="$vMyVar"/>" 
</xsl:template> 
</xsl:stylesheet> 

當應用於任何XML文檔(未使用),會產生這樣的結果

From template matching '/': "3" 

    From template2: "3" 
0

如果變量的值是在轉型過程中保持恆定,可以使它通過將其放在輸入模板之外而成爲一個全局變量。

如果變量在不同的時間有不同的值,那麼您需要使用在調用模板中設置並用於調用模板的參數。 (在XSLT 2.0中,您可以使用隧道參數:如果這些參數在條目模板中設置,那麼它們可以在任何地方使用,而不必通過所有中間模板調用顯式傳遞)。

作爲一般原則,當你沒有描述你的問題時,很難告訴你,只有一個建議的解決方案 - 你在XSLT中的經驗水平是這樣的,你試圖實現的解決方案可能不是最合適的一個。