2015-06-17 47 views
1

任何人請告訴下面的代碼有什麼問題, 我無法創建嵌套變量,即格式爲$ v1/v2。 但我相信這些格式應該工作。XSLT中嵌套標記的變量聲明

<xsl:variable name="n" select="100"/> 
<xsl:variable name="v1"> 
    <v2> 
     <xsl:value-of select="$n"></xsl:value-of> 
    </v2> 
</xsl:variable> 

<xsl:if test="$v1/v2"> 
    <message:output> 
     <xsl:value-of select="$v1/v2"/> 
    </message:output> 
</xsl:if> 
+0

XSLT1或XSLT2?答案是大不相同的兩個 –

+0

我使用If語句爲: 0」> –

+0

我正在使用XSLT2版本 –

回答

0

我有點困惑在這裏,當我檢查使用<xsl:value-of select="system-property('xsl:version')" />版本它給了我作爲輸出。

但在我的樣式表標籤它被提及爲1.0,所以下面的代碼不起作用。

當我將版本更改爲2.0時:<xsl:stylesheet version="2.0" 相同的代碼開始工作。

<xsl:template match="/"> 
    <message:ExecuteSubProcessResponse> 
     <xsl:variable name="n" select="100"/> 
     <xsl:variable name="v1"> 
     <v2> 
      <xsl:value-of select="$n"></xsl:value-of> 
     </v2> 
     </xsl:variable> 
     <xsl:choose> 
     <xsl:when test="count($v1/v2)> 0"> 
     <message:BIMStatus> 
      <xsl:text disable-output-escaping="no">ELIGIBLE</xsl:text> 
     </message:BIMStatus> 
     </xsl:when> 
     <xsl:otherwise> 
     <message:BIMStatus> 
      <xsl:value-of select="$v1/v2"/> 
     </message:BIMStatus> 
     </xsl:otherwise>  
     </xsl:choose> 
    </message:ExecuteSubProcessResponse> 
    </xsl:template> 
+0

using:

1

在XSLT 2.0中,您的代碼看起來很好;在XSLT 1.0中,它會失敗,說在諸如$v1/v2的路徑表達式中,$ v1的值必須是節點集而不是結果樹片段。大多數XSLT 1.0處理器允許您通過使用xx:node-set($v1)/v2來解決此限制,其中xx綁定到某些可用的命名空間。

XSLT的版本取決於您使用的XSLT處理器。有一個或兩個處理器運行XSLT 1.0或2.0,具體取決於您在xsl:stylesheet版本屬性中要求的內容,但用XSLT 1.0版編寫的處理器不知道如何處理XSLT 2.0以及大多數XSLT 2.0處理器如果他們在樣式表中看到版本=「1.0」,將以「向後兼容模式」運行XSLT 2.0,而XSLT 2.0並沒有強加XSLT 1.0的所有限制(如結果樹分段限制),它僅僅使一些構造行爲1.0方式(例如,xsl:value-of將僅輸出節點序列中的第一個節點)。

如果您告訴我們您的代碼輸出的內容會更容易幫助您。