2014-02-10 32 views
1

我喜歡創建一個變量,其中包含相應元素的完整PACKAGE名稱路徑。 (只是爲了能夠比較晚路徑)XSLT 2.0使用for-each循環設置變量

現在我有XSLT結構:

<xsl:for-each select="ancestor-or-self::*"> 
    <xsl:if test="local-name()='PACKAGE'"> 
     <xsl:text>/</xsl:text> 
     <xsl:value-of select="NAME/."/> 
     <xsl:if test="position() != last()"> 
     </xsl:if> 
    </xsl:if> 
</xsl:for-each> 

這上面的結構導致了我正確的路徑,但是當我試圖把那個輸出變量(通過將foreach之外的<xsl:variable name="myPath"></xsl:variable>)變量保持爲空。

那麼,爲什麼在:

<xsl:variable name="myPath"> 
    <xsl:for-each select="ancestor-or-self::*"> 
    <xsl:if test="local-name()='PACKAGE'"> 
    <xsl:text>/</xsl:text> 
    <xsl:value-of select="NAME/."/> 
     <xsl:if test="position() != last()"> 
     </xsl:if> 
    </xsl:if> 
    </xsl:for-each> 
</xsl:variable> 

$myPath仍然是空的? 我在這裏錯過了什麼?

+0

如果您嘗試在循環中分配數字,它會工作嗎? – bf2020

+0

數字賦值不會改變這種情況。我用Saxon-B 9.1.0.6使用Oxygen。如果將foreach循環放置在變量assigment中,它似乎不會被訪問。上面的腳本向我輸出了正確的路徑,但我無法將其設置爲變量。 – Janne

+0

確保您在代碼後面的某個地方使用該變量,否則XSLT處理器根本無法執行代碼。因此,在沒有看到更多信息的情況下,我認爲撒克遜人根本就沒有執行變量的值,因爲你不使用它。如果您仍有問題,請考慮發佈最少但完整的樣本,以便我們重現問題。 –

回答

2

請確保您在代碼稍後的某個地方使用該變量,否則XSLT處理器根本無法執行代碼。因此,在沒有看到更多信息的情況下,我認爲撒克遜人根本就沒有執行變量的值,因爲你不使用它。