我有类似下面的代码::
<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
,但这不是一个节点集:/
任何想法,我做错了什么?
答案 0 :(得分:4)
您使用的是XSLT 1吗?您不能将xpath表达式应用于XSLT 1中的变量。 但是,您可以在XSLT 2中使用。
根据您的XSLT处理器,您可以访问自定义扩展,例如EXSLT的节点集功能。
答案 1 :(得分:0)
切换到XSLT 2.0处理器后,实际上还有两种其他解决方案
一个是应用依赖于处理器的功能,例如Kevan所说的,例如msxsl:node-set()
或xalan:nodeset()
或exsl:node-set()
。
另一种方法是利用xsl:variable
select
属性包含result tree fragment
(例如样本变量)到节点集的转换这一事实;因此,定义一个新的变量,其select属性等于要被寻址的属性,将起到作用:
<xsl:variable name="temp" select= "$sample"/>
<xsl:for-each select="$temp/*">
<!-- do something -->
</xsl:for-each>