【问题标题】:Saxon XPATH 2.0-- working correctly?Saxon XPATH 2.0——工作正常吗?
【发布时间】:2013-06-17 17:33:25
【问题描述】:

我有一个简单的 XML 文件用于测试:

<?xml version="1.0" encoding="UTF-8"?>
<A>
    <B >1</B>
    <B >2</B>
    <B >3</B>
    <B >2</B>
    <B >4</B>
    <B >5</B>
    <B >3</B>
</A>

我正在 Eclipse (Juno) 的 XPATH 控制台中尝试一些 XPATH 2.0 功能。我似乎无法运行以下内容:

distinct-values(/A/B/text())

我认为结果应该是数字 1-5。相反,我得到了

1
2
3
2
4
5
3

其他人可以证实这一点吗?我再次在 Eclipse 中尝试使用 Saxon 9.4 作为 XSLT 2.0 处理器。也尝试过 PsychoPath。

我对 distinct-values() 有误解吗?我认为在 XSLT 2.0 中它会采用一系列原子数据或一组节点并吐出唯一的项目。

谢谢。

【问题讨论】:

  • 我认为问题一定出在 Eclipse/Juno 环境上。撒克逊人本身对此没有任何问题。

标签: eclipse distinct xslt-2.0 saxon xpath-2.0


【解决方案1】:

我可以向您保证,Saxon 支持 distinct-values 函数,它适用于从命令行运行的 Saxon 9.5 HE Java(使用 XQuery 而不是 XPath,因为纯 XPath 2.0 没有命令行界面,但是测试一个简单的函数调用应该无关紧要)。所以在使用时

'C:\Program Files (x86)\Java\jre7\bin\java.exe' -cp 'C:\Program Files (x86)\Saxonica\SaxonHE9.5J\saxon9he.jar' net.sf.saxon.Query -s:test2013061801.xml '-qs:distinct-values(/A/B)'

在 Windows 8 上的 Powershell 命令行提示符下,输入 XML test2013061801.xml 的内容是您的文件

<?xml version="1.0" encoding="UTF-8"?>
<A>
    <B >1</B>
    <B >2</B>
    <B >3</B>
    <B >2</B>
    <B >4</B>
    <B >5</B>
    <B >3</B>
</A>

撒克逊输出&lt;?xml version="1.0" encoding="UTF-8"?&gt;1 2 3 4 5。

我不知道 Saxon 如何在 Eclipse 中集成或 PsychoPath 是什么,但对于 Saxon 或任何其他 XPath 2.0 或 XQuery 1.0,您应该不会对返回不同值的路径表达式有任何问题。

【讨论】:

    【解决方案2】:

    是的 distinct-value 函数工作正常,您可以从下面提到的代码中找到正确的结果:

    <xsl:template match="A">
    <xsl:for-each select="distinct-values(child::B)">
    <xsl:value-of select="."></xsl:value-of>
    </xsl:for-each>
    </xsl:template>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 2011-12-10
      相关资源
      最近更新 更多