按名称设置的XPath查询分组节点

时间:2014-03-18 09:02:41

标签: xml xpath

我想选择根文档/*/*的所有节点(第一个子节点),但我的问题是只选择标记的名称作为集合。 例如:

`

<root>
   <node1>X</node1>
   <node1>Y</node1>
   <node2>W</node2>
   <node3>Z</node3>
   <node3>K</node3>
   <node4>V</node4>
</root>

`

我希望结果只有'node1,node2,node3,node4'而不重复节点名称。

感谢。

1 个答案:

答案 0 :(得分:2)

如果可以保证输入XML中具有相同名称的元素始终相邻,那么就可以提取那些名称与其前一个兄弟(如果有)不同的元素:

/root/*[not(name() = name(preceding-sibling::*[1]))]

如果你不能保证这一点,而是需要针对所有其前面的兄弟姐妹检查每个元素,那么我在单个XPath 1.0表达式中看不到这样做的方法 - 你' d必须有两个嵌套谓词,当你进入内部谓词时,没有办法引用外部谓词测试的节点。