如何遍历保存在xslt中的变量中的结果集

时间:2017-04-14 05:03:47

标签: xslt

<xsl:variable name="result">
<values>
<value>1</value>
<value>1</value>
<value>1</value>
<value>1</value>
</values>
<xsl:variable>
<xsl:for-each select="$result/values/value">
<xsl:copy-of select=".">
</xsl:for-each>

当我尝试遍历每个循环的结果集时,它在eclipse javax解析器中抛出错误,但其工作正常的在线xslt工具。如何让它在eclipse中工作。

2 个答案:

答案 0 :(得分:0)

我认为Eclipse使用Xalan(XSLT 1.0),在线测试期间,您使用了另一个XSLT引擎,可能还有XSLT 2.0。

进行以下更改:

  • stylesheet标记中添加xmlns:exsl="http://exslt.org/common"extension-element-prefixes="exsl"(将在下面使用)。
  • for-each指令更改为 <xsl:for-each select="exsl:node-set($result)/values/value">

我使用 Xalan 引擎在 xslttransform 上测试了这些更改,它可以正常工作 (在 Saxon 9 ...... 引擎上,它不起作用,因为&#34;较新的&#34;撒克逊版本没有 支持exsl)。

您还需要整理源XML:

  • <xsl:variable>更改为</xsl:variable>结束标记)。
  • <xsl:copy-of select=".">更改为<xsl:copy-of select="."/> (添加缺失&#34; /&#34;最后)。

要建立您的知识,请阅读node-set函数。 有时在XSLT 1.0中需要它。

答案 1 :(得分:0)

如果您正在使用Eclipse,那么没有什么可以阻止您前进到XSLT 2.0。安装Saxon,问题就会消失。 XSLT 1.0已有17年历史,并在10年前被取代。在某些环境中,您仍然别无选择,但在Java世界中,您需要向前迈进。