0

我有一个用于测试的简单 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 中它会采用一系列原子数据或一组节点并吐出唯一的项目。

谢谢。

4

2 回答 2

0

是的 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>
于 2013-06-19T11:50:57.033 回答
0

我可以向您保证,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>

撒克逊输出<?xml version="1.0" encoding="UTF-8"?>1 2 3 4 5

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

于 2013-06-18T10:53:47.033 回答