我想选择根文档/*/*
的所有节点(第一个子节点),但我的问题是只选择标记的名称作为集合。
例如:
`
<root>
<node1>X</node1>
<node1>Y</node1>
<node2>W</node2>
<node3>Z</node3>
<node3>K</node3>
<node4>V</node4>
</root>
`
我希望结果只有'node1,node2,node3,node4'
而不重复节点名称。
感谢。
答案 0 :(得分:2)
如果可以保证输入XML中具有相同名称的元素始终相邻,那么就可以提取那些名称与其前一个兄弟(如果有)不同的元素:
/root/*[not(name() = name(preceding-sibling::*[1]))]
如果你不能保证这一点,而是需要针对所有其前面的兄弟姐妹检查每个元素,那么我在单个XPath 1.0表达式中看不到这样做的方法 - 你' d必须有两个嵌套谓词,当你进入内部谓词时,没有办法引用外部谓词测试的节点。