在XPath中选择相同的属性并返回结果而不重复

时间:2009-08-13 11:15:36

标签: xml xpath

我有一个这样的XML文档:

<wii>
  <game>
    <type genre="arcade" />
    <type genre="sport" />
  </game>
  <game>
    <type genre="platform" />
    <type genre="arcade" />
  </game>
</wii>

如何仅使用XPath列出所有类型而不重复?

感谢。

2 个答案:

答案 0 :(得分:5)

/wii/game/type/@genre[not(. = preceding::type/@genre)]

简单地说,这将选择文档前一部分中没有同等值@genre节点的任何@genre属性节点。

相等=运算符,当给定普通值和节点集时,它将普通值与节点集中的每个节点进行比较,返回true只有当所有节点都匹配时(注意!=不这样做,它才会与该集合的第一个节点进行比较!)。结果必须用not()否定。

答案 1 :(得分:0)

您是否尝试过distinct-values()函数?

distinct-values(//type/@genre)

如果您无法使用该功能,那显然没有用。

Here's a link指向仅使用XPath的方法。