在Xpath中有所区别?

Ant*_*ine 45 xml xpath distinct

我有这个XML文件,我想从中计算它中引用的用户数.但它们可以出现在多个类别中,我希望这些重复项不被考虑在内.
在下面的示例中,查询应该返回3而不是4.在XPath中是否有办法这样做?用户根本没有排序.

<list>
  <group name='QA'>
    <user name='name1'>name1@email</user>
    <user name='name2'>name2@email</user>
  </group>
  <group name='DEV'>
    <user name='name3'>name3@email</user>
    <user name='name2'>name2@email</user>
  </group>
</list>
Run Code Online (Sandbox Code Playgroud)

Dim*_*hev 32

一个纯XPath 1.0 - 单行:

用途:

count(/*/group/user[not(. = ../following-sibling::group/user)])


gin*_*boy 21

使用函数名称空间http://www.w3.org/2005/xpath-functions可以使用

distinct-values(//list/group/user)
Run Code Online (Sandbox Code Playgroud)

更新:

在xsl/xslt文件的顶部,你应该有一个样式表元素,将上面的url映射到前缀fn,如下所示......

<xsl:stylesheet version="1.0"
 xmlns:fn="http://www.w3.org/2005/xpath-functions"
 >
Run Code Online (Sandbox Code Playgroud)

然后你可以使用

select="fn:distinct-values(//list/group/user)"
Run Code Online (Sandbox Code Playgroud)

这假设你是在模板中而不是在某些xpathdocument对象中执行此操作,在这种情况下,您需要使用namespacemanager类.

链接...

XSLT:将命名空间添加到根元素

http://www.xqueryfunctions.com/xq/fn_distinct-values.html

http://msdn.microsoft.com/en-us/library/d6730bwt(VS.80).aspx

否则试试Dimitre Novatchev的回答.

  • @Dimitre:他应该把它放在帖子中,而不是在没有人看的页面上埋下一些评论. (3认同)
  • `distinct-values()`函数仅在XPath 2.0中实现,这仅在XSLT 2.0中实现.您的答案中的代码在XSLT 1.0中不起作用.请改正. (2认同)
  • @Dimitre:OP 没有指定 XSLT 1.0,所以我认为说“请纠正”有点粗鲁。这个答案已经是正确的了。 (2认同)