DOMDocument使用PHP通过标识符删除div及其内容

时间:2017-01-03 21:49:10

标签: php html dom xpath domdocument

您好我想用PHP从HTML文件中删除一行 像这样:

<div id="buttons">
    <div id="buttonid_4"><a href="#">Button 4</a></div>
    <div id="buttonid_3"><a href="#">Button 3</a></div>
    <div id="buttonid_2"><a href="#">Button 2</a></div>
    <div id="buttonid_1"><a href="#">Button 1</a></div>
</div>

所以,我想要删除buttonid_4,它的内容。 它会是这样的:

<div id="buttons">
    <div id="buttonid_3"><a href="#">Button 3</a></div>
    <div id="buttonid_2"><a href="#">Button 2</a></div>
    <div id="buttonid_1"><a href="#">Button 1</a></div>
</div>

首先我认为这很容易,但我找不到答案:|

我试过了: &#34;简单&#34;

                    $dom = new DOMDocument('1.0', 'utf-8');
                    $dom->loadHTMLFile($The_Path_For_File);
                    $element = $dom->getElementById('buttonid_'. $Button_Id);
                    $element->parentNode->removeChild($element);
                    $dom->saveHTMLFile($The_Path_For_File);

我得到了

  

在非对象

上调用成员函数removeChild()

每当我尝试使用GetElementById时,我继续使用XPATH:

                    $xpath = new DOMXpath($dom);

                    $nodeList = $xpath->query('//div[@id="buttonid'.$Button_Id.'"]');
                    foreach($nodeList as $element){
                        $dom->$element->removeChild($element);
                    }
                    $dom->saveHTMLFile($The_Path_For_File);

我没有收到错误,记事本要求刷新文件,但没有变化 有谁知道如何制作这个?

1 个答案:

答案 0 :(得分:0)

使用getElementById需要文档类型声明(DTD)。  PHP Documentation

请注意您的HTML验证失败$dom->validate()

只需将<!DOCTYPE html>添加到您的HTML中即可。

  

要使此功能起作用,您需要设置一些ID   具有DOMElement :: setIdAttribute的属性或定义了一个的DTD   属性为ID类型。在后一种情况下,您需要   使用DOMDocument :: validate 或。验证您的文档   使用此函数之前的DOMDocument :: $ validateOnParse。