2012-03-25 26 views
0

我有類似如下的代碼::如何使用XSLT的XPath變量的表達式

<xsl:variable name="sample"> 
    <xsl:copy-of select="//foo"> 
    <xsl:copy-of select="//bar"> 
</xsl> 

而且在模板我想使用:

<xsl:for-each select="$sample/*"> 
    <!-- do something --> 
</xsl:for-each> 

然而,$sample/*不似乎是一個有效的XPath表達式或返回一個節點集,我不能完全弄清楚,如何解決它。 我也試過$sample,但這不是一個節點集:/ 任何想法,我做錯了什麼?

回答

4

您使用的是XSLT 1嗎?您無法將xpath表達式應用於XSLT 1中的變量。 但是,您可以在XSLT 2中進行操作。

根據您的XSLT處理器,您可能有權訪問自定義擴展,例如EXSLT的節點集函數。

+0

謝謝,就是這樣。 exsl:節點集功能就像一個魅力:) – rumpel 2012-03-25 21:22:24

0

切換到XSLT 2.0處理器旁邊實際上有兩個其他解決方案。
正如Kevan所說的那樣應用處理器相關函數,例如msxsl:node-set()xalan:nodeset()exsl:node-set()
另一種是利用這樣一個事實,即xsl:variableselect屬性包括result tree fragment(例如您的示例變量)到節點集的轉換;因此定義一個新的變量,選擇屬性等於要解決的變量,將做的伎倆:

<xsl:variable name="temp" select= "$sample"/> 
<xsl:for-each select="$temp/*"> 
    <!-- do something --> 
</xsl:for-each>