2012-06-30 107 views
5

如何在XSLT中的兩個模板之間傳遞變量。如何在XSLT中的兩個模板之間傳遞變量

我不能使用全局變量,因爲變量的值取決於當前正在評估的節點。

說我有幾分XSLT:

<xsl:template match="product"> 
<xsl:variable name="pr-pos" select="count(./preceding-sibling::product)+1"/> 
.. 
.. 
.. 
<xsl:apply-templates select="countries/country"/> 
</xsl:template> 

<xsl:template match="countries/country"> 
<tr id="country-id"> 
    <td><a href="#" class="action" id="{concat('a-',$pr-pos)}">+</a></td> 
.. 
.. 

這給了錯誤的$ PR-pos是不是第二個模板訪問。

如何將變量pr-pos的值傳遞給其他模板?我怎樣才能做到這一點?

+0

在你的情況下,你並不需要傳遞一個變量。您希望通過的'$ pr-pos'的值可以從'country'模板中辨別。 – Utkanos

+0

所有編程語言(大多數)都有一種方法將信息傳遞給另一個執行單元,並學習如何做到這一點是基本原則之一。這個問題大致相當於問如何在JavaScript中的兩個函數之間傳遞變量,或者說「我試過'函數a(){var i = 5; b();} function b(){alert(i); }'但是'i'在第二個函數中不可訪問。「 – 2012-07-01 08:23:00

+0

@torazaburo:我找不到一個有用的東西,它告訴我如何在google上做到這一點。我不知道這就是爲什麼問,如果你有問題的人問你爲什麼不在StackOverflow上禁用你的帳戶。搜索谷歌,並告訴我你找到除了W3文檔以外的任何好文檔。 – Harshdeep

回答

10
<xsl:template match="product"> 
    <xsl:variable name="pr-pos" select="count(./preceding-sibling::product)+1"/> 
    .. 
    .. 
    .. 
    <xsl:apply-templates select="countries/country"> 
     <xsl:with-param name="pr-pos" select="$pr-pos" /> 
    </xsl:apply-templates> 
</xsl:template> 

<xsl:template match="countries/country"> 
    <xsl:param name="pr-pos" /> 
    <tr id="country-id"> 
     <td><a href="#" class="action" id="{concat('a-',$pr-pos)}">+</a></td> 
     .. 
     .. 
+0

我搜索了一些,並做了完全相同的事情,然後檢查StackOverflow上的答案,它工作。然後也感謝您的幫助:) – Harshdeep