【问题标题】:How to select two different elements with an XPath query如何使用 XPath 查询选择两个不同的元素
【发布时间】:2014-12-14 14:53:42
【问题描述】:

我选择<a id="categoryBrandIcon"> :

$item = $xpath->query("//a[@id='categoryBrandIcon']")->item(0);

如何修改代码以选择<a id="categoryBrandIcon"> 和所有<input type="hidden"> 标签?

如果input[@type='hidden'] 则选择输入,但我不知道如何链接这两个。

使用 CSS 选择器我会这样做 a#categoryBrandIcon, input[type="hidden"]

【问题讨论】:

标签: php xpath css-selectors


【解决方案1】:

您可以将两个 xpath 查询与竖线组合在一起,因此只需将您的两个查询链接在一起:

//a[@id='categoryBrandIcon'] | //input[@type='hidden']

【讨论】:

    【解决方案2】:

    是的,您可以通过管道将它们组合在一个 xpath 查询中。示例:

    $sample_markup = '
    <div class="container">
        <a id="categoryBrandIcon" href="#">Test</a>
        <input type="hidden" />
        <input type="text" />
        <h1>Test</h1>
    </div>
    ';
    
    $dom = new DOMDocument();
    $dom->loadHTML($sample_markup);
    $xpath = new DOMXPath($dom);
    
    $elements = $xpath->query("//a[@id='categoryBrandIcon'] | //input[@type='hidden']");
    foreach($elements as $e) {
        // loop thru found elements
    }
    

    【讨论】:

    • 如何在不使用循环的情况下删除它们?
    • @Ultra 你能改写一下吗? remove them without loop usage?你将如何扫描那些找到的元素?
    • 要访问每个节点(例如删除它)我需要 foreach 循环 - 有没有办法将它们作为一个组访问并删除它们?
    • @超喜欢$e-&gt;parentNode-&gt;removeChild($e) ?我不认为有这样的功能可以批量删除节点
    猜你喜欢
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    相关资源
    最近更新 更多