2013-02-04 260 views
1

當我應用轉換時,我得到一個異常:表達式必須計算爲一個節點集。這個XSL代碼有什麼問題?

<xsl:for-each select = "some expression"> 
    <xsl:variable name="a0" select="some expression"/> 
    <xsl:variable name="a1" select="some expression"/> 
    <xsl:variable name="a2" select="some expression"/> 

    <xsl:for-each select="$a0 | $a1 | $a2"> 
     <xsl:value-of select="."/> 
     <xsl:if test="position()!=last()">,</xsl:if> 
    </xsl:for-each> 

    </xsl:for-each> 

現在,如果我將if語句放在第一個循環的級別,可以正確應用變換。

如果問題在於表達式「$ a0 | $ a1 | $ a2」不被視爲一個節點集,我該如何使用XSLT 1.0來實現類似的目標?

+0

我以前使用過保留字'或',但還沒有試過看它是否會適用於你的情況。 – Filype

回答

3

由於錯誤狀態,在XSLT 1.0中,不能使用聯合運算符來加入不是已經是節點的操作數。

如果你使用的是支持the node-set() function XSLT處理器,你可以這樣做:

<xsl:for-each select="exsl:node-set($a0) | exsl:node-set($a1) | exsl:node-set($a2)"> 
    <xsl:value-of select="."/> 
    <xsl:if test="position()!=last()">,</xsl:if> 
</xsl:for-each> 

但是,如果你要做到這一點,你不妨這樣做:

<xsl:value-of select="concat($a0, ',', $a1, ',', $a2)" /> 

從你最近提出的一個問題來看,也許你有很多變量,在這種情況下,或許你的設計需要重新思考。如果你可以提供一些細節而不是通用的佔位符,也許有人可以用不同的方法給你提供建議。