【问题标题】:Get html nodes that are not within a node with attribute X获取不在具有属性 X 的节点内的 html 节点
【发布时间】:2016-07-06 15:38:53
【问题描述】:

我有以下 xpath 查询,但我不知道如何创建它,所以它只查找具有属性 pi-repeat 的项目,而不是具有该属性的子项。

$xpath = new DOMXPath($dom);
foreach ($xpath->query('//*[@pi-repeat]') as $node) {
    // Do stuff
}

HTML 示例:

<body>
    <div pi-repeat="thing1">
        <div pi-repeat="sub-item"></div>
    </div>
    <div class="a-class">
        <div pi-repeat="thing2">
            <div pi-repeat="sub-item"></div>
        </div>
    </div>
</body>

正如您在此处看到的,有四个 pi-repeat 属性,我希望我的查询仅选择不在元素 pi-repeat 属性中的那些。

在这种情况下,只有 thing1thing2 会被选中。

【问题讨论】:

    标签: php dom xpath domdocument


    【解决方案1】:

    下面 XPath 中的第二个谓词将完成这项工作。它过滤掉祖先元素具有pi-repeat属性的元素:

    //*[@pi-repeat][not(ancestor::*[@pi-repeat])]
    

    【讨论】:

    • 您已将要求中的“内部”理解为“拥有...的祖先”。它也可以读作“有一个父母……”在这种情况下,答案是//*[@pi-repeat][not(..[@pi-repeat])]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2013-10-05
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多