如何在xslt xpath表达式中使用变量

时间:2012-03-25 19:51:33

标签: 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,但这不是一个节点集:/ 任何想法,我做错了什么?

2 个答案:

答案 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>