仅使用xPath获取最上面的节点,必须排除子节点


Get only uppermost nodes with xPath, child nodes must be excluded

使用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')]])
    ]