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

时间:2014-08-17 10:30:58

标签: php xpath domxpath

使用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>

我正在使用此查询选择所有具有以&#39;某些&#39;

开头的属性的节点
//*[@*[starts-with(name(), 'some')]]

我只需要最上面的节点。例如,带有id 1和2的元素。如果我对id为1的元素使用相同的查询,那么我应该得到id为1-1的元素。

如何使用xpath实现此目的?

1 个答案:

答案 0 :(得分:0)

要获取最外层节点,您可以尝试过滤出具有属性的祖先的节点以&#34; name&#34; :

//*[.... and not(ancestor::*[@*[starts-with(name(), 'some')]])]

所以整个Xpath表达式如下所示:

//*[
      @*[starts-with(name(), 'some')] 
        and 
      not(ancestor::*[@*[starts-with(name(), 'some')]])
    ]