2011-04-08 40 views
1

我正嘗試使用xpath中的for-each變量。但它給了我一個表達式必須評估爲節點集的錯誤。如何在變量中存儲xpath並將它與XSLT 1.0配合使用

節點名被定義爲

<xsl:variable name="NodeName" select="name(.)"/> 

<xsl:variable name="SyncPath" 
       select="concat('/combinedxml/com.csc_PolicySyncRs/',$NodeName)"/> 

,這裏是for-each循環

<xsl:for-each select="$SyncPath/*"> 

+1

能否請您提供您指的是很好地格式化XSLT片段? – 2011-04-08 14:51:31

+0

你能說明$ NodeName是如何定義的嗎? – 2011-04-08 14:59:00

+1

這是http://stackoverflow.com/questions/4377811/using-dynamic-xpath-in-xslt或http://stackoverflow.com/questions/4682151/xslvariable-as-xpath-value-for- other-xsl-tag或http://stackoverflow.com/questions/1551526/is-it-possible-to-use-a-dynamic-xpath-expression-in-a-xslt-style-sheet或http: //www.google.com/search?q=site%3Astackoverflow.com+xslt+dynamic+xpath – 2011-04-08 15:10:07

回答

2

我會胡亂猜測和假設你有興趣轉換變量節點集以便稍後在XPath中使用它。這可以使用擴展功能exsl:node-set()完成。 documentation有使用的例子。

引用:

此用例示出了使用exsl所述的 結果:節點集()將一個 結果樹片段轉換爲節點集。

<doc> 
    <one /> 
    <two /> 
    <three /> 
    <four /> 
</doc> 

樣式表

<!-- Test exslt:node-set applied to a result tree fragment --> 
<xsl:variable name="tree"> 
    <a> 
     <b> 
     <c> 
      <d /> 
     </c> 
     </b> 
    </a> 
</xsl:variable> 
<xsl:template match="/"> 
    <out> 
     <xsl:value-of select="count(exslt:node-set(//*))" /> 
    </out> 
</xsl:template> 

結果

<out xmlns:exslt="http://exslt.org/common">5</out> 
+0

即使添加了命名空間,exslt仍未定義。 – user433023 2011-04-08 14:59:42

0

XSLT 1.0(實際上2.0)具有用於構建XPath表達式作爲一個字符串,然後計算它沒有標準設施。許多處理器具有擴展功能要做到這一點,各種所謂的達因:評價,撒克遜:評估等

1

使用

<xsl:variable name="SyncPath" 
    select="/combinedxml/com.csc_PolicySyncRs/*[name()=$NodeName]"/> 
相關問題