PHP - 删除div的内容在特定文件

时间:2017-08-20 21:40:33

标签: php

我编写了一个打开HTML文件的函数,删除了某个类的div的内容并保存了该文件。我在三个不同的位置创建了3个测试文件。我的功能在site.html和site3.html上运行良好,但在site2.html

上运行不正常

文件夹结构如下:

/testing/script.php //包含我的功能

  • /testing/site.html
  • /testing/folder1/site2.html //脚本在此文件中不起作用
  • 文件夹2 / site3.html

文件的HTML是相同的

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="string">Content of site2.html</div>
<div id="well">not here</div>
<div id="empty"></div>
<div>foo</div>
</body>
</html>

这是我的script.php

<?php 

    $urls = array(
            "site.html",
            "/folder1/site2.html",
            "../folder2/site3.html"
        ); // get the urls of the files

    function DeleteContent () {

        global $urls;

        echo "DeleteContent is running";

        if (is_array($urls) || is_object($urls)) {
            foreach($urls as $url) {

                $dom = new DOMDocument;
                $dom->loadHTMLFile($url);
                $xpath = new DOMXPath($dom);
                $pDivs = $xpath->query(".//div[@class='string']");

                foreach ( $pDivs as $div ) {
                    $div->removeChild($div->firstChild);
                }

                $dom->saveHTMLFile($url);

            }
        }
    }

    DeleteContent();


?>

我收到此错误

捕获致命错误:传递给DOMNode :: removeChild()的参数1必须是DOMNode的一个实例,null给定,在第57行的/testing/script.php中调用,在第29行的/testing/script.php中定义

//原始文件中的第29行(根据问题进行了调整)

foreach ( $pDivs as $div ) {
    $div->removeChild($div->firstChild); // line 29
}

2 个答案:

答案 0 :(得分:1)

我想那个

<div id="empty"></div>

导致您的“null-Exception”。内部无需删除。

答案 1 :(得分:1)

我所能建议的是在删除它之前测试firstChild,因为你的代码看起来很好。

foreach ( $pDivs as $div )
{
    if( $div->firstChild )
    {
      $div->removeChild( $div->firstChild );
    }
}