使用XPath 1.0
<div id="master">
<div someAttr id="1">
<div someAttr id="1-1">
<div someAttr id="1-1-1">
<div someAttr id="1-1-1-1">innermost child</div>
</div>
</div>
</div>
<div someAttr id="2">
<div someAttr id="2-1">
<div someAttr id="2-1-1">
<div someAttr id="2-1-1-1">innermost child</div>
</div>
</div>
</div>
</div>
我正在使用这个查询,它选择所有具有属性以'some'开头的节点
//*[@*[starts-with(name(), 'some')]]
我只需要最上面的节点。例如,id为1和2的元素。如果我对id为1的元素使用相同的查询那么我应该得到id为1-1的元素等等
如何使用xpath实现这一点?
要只获得最外层的节点,您可以尝试过滤掉具有属性以"name"开头的祖先的节点:
//*[.... and not(ancestor::*[@*[starts-with(name(), 'some')]])]
整个Xpath表达式是这样的
//*[
@*[starts-with(name(), 'some')]
and
not(ancestor::*[@*[starts-with(name(), 'some')]])
]