我正在解析一些像这样的XML:
<root>
<some_gunk/>
<dupe_node>
...
stuff I want
...
</dupe_node>
<bits_and_pieces/>
<other_gunk/>
<dupe_node>
...
stuff I don't want
...
</dupe_node>
<more_gunk/>
</root>
'//dupe_node'
的XPath会给我两个dupe_node
个实例。我只想穿越第一个。我可以用XPath做到这一点吗?
答案 0 :(得分:42)
/descendant::dupe_node[1]
//dupe_node[1]
通常是错误的,尽管它在这种特殊情况下会产生相同的结果。 See docs:
位置路径// para [1]与位置路径/ descendant :: para [1]的含义不同。后者选择第一个后代para元素;前者选择所有后代的para元素,这些元素是他们父母的第一个孩子。
给出以下XML:
<foo>
<bar/>
<foo>
<bar/>
</foo>
</foo>
//bar[1]
将生成两个节点,因为这两个节点都是其各自父节点的第一个子节点。
/descendant::bar[1]
将只提供一个节点,这是文档中所有小节的第一个。
答案 1 :(得分:6)
答案 2 :(得分:4)
// dupe_node [1]