【问题标题】:How to delete two elements in a page DOM with PHP如何使用 PHP 删除页面 DOM 中的两个元素
【发布时间】:2020-01-05 08:16:56
【问题描述】:

我必须通过 PHP 删除当前网页的 DOM 中的一个元素。下面的代码似乎可以工作,但我无法像以前那样加载页面,因为代码每次都会在无限循环中重新运行。此外,通过加载页面来删除某些内容效率低下,并且会减慢页面加载时间。我能怎么做?感谢您的帮助!

$dom = new DOMDocument();
$dom->load("https://www.example.com/product1/");

$selector = new DOMXPath($dom);
foreach($selector->query('//div[contains(attribute::class, "my-class1")]') as $e ) {
    $e->parentNode->removeChild($e);
}

$dom->saveHTML();
}

【问题讨论】:

  • “因为代码每次都会在无限循环中重新运行” //div[@class='my-class1']。
  • 您将需要使用output bufferingcurrent page 中删除项目- 将缓冲区加载到DOMDocument 实例中,修改DOM,然后刷新缓冲区
  • @Jeto //div[@class='my-class1'] 效果很好!

标签: php dom element


【解决方案1】:

要使用 PHP 从 current page 中删除内容,您必须在使用 ob_start 渲染之前处理 output buffer,并使用回调函数对 DOM 进行修改。

下面的一个非常基本的示例将删除所有带有my-class1 类的元素

<?php
    function callback($buffer){
        $dom=new DOMDocument;
        $dom->loadHTML( $buffer );
        $xp=new DOMXPath( $dom );
        $col=$xp->query( '//div[ contains( @class, "my-class1" ) ]' );
        foreach( $col as $node )$node->parentNode->removeChild( $node );
        return $dom->saveHTML();
    }
    ob_start('callback');
    ob_implicit_flush();
?>
<!DOCTYPE html>
<html lang='en'>
    <head>
        <meta charset='utf-8' />
        <title>DOM Manipulation</title>
    </head>
    <body>
        <div class='my-class1'>#1</div>
        <div class='my-class1'>#2</div>
        <div class='my-class1'>#3</div>

        <div class='my-class2'>#4</div>
        <div class='my-class2'>#5</div>
        <div class='my-class2'>#6</div>
    </body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多