$code = '
<h1>Galeria </h1>

<div class="galeria">
    <ul id="galeria_list">
        <li>
          <img src="img.jpg" width="350" height="350" />
          <br />
          Teste
        </li>
    </ul>
</div>';


$dom = new DOMDocument;
$dom->validateOnParse = true;

$dom->loadHTML($code);

var_dump($dom->getElementById('galeria_list'));


var_dump始终返回NULL。有人知道为什么吗?我可以清楚地在galeria_list中看到ID为$code的元素。为什么这没有得到要素?

而且,有人知道如何防止domdocument在<html>方法上添加<body>saveHTML标记吗?

谢谢

最佳答案

看来DOMDocument不能与HTML片段配合使用。您可能要考虑DOMDocumentFragment(作为dnagirl suggests)或考虑扩展DOMDocument

经过一些研究,我整理了一个简单的扩展程序,可以实现您的要求:

class MyDOMDocument extends DOMDocument {

    function getElementById($id) {

        //thanks to: http://www.php.net/manual/en/domdocument.getelementbyid.php#96500
        $xpath = new DOMXPath($this);
        return $xpath->query("//*[@id='$id']")->item(0);
    }

    function output() {

        // thanks to: http://www.php.net/manual/en/domdocument.savehtml.php#85165
        $output = preg_replace('/^<!DOCTYPE.+?>/', '',
                str_replace( array('<html>', '</html>', '<body>', '</body>'),
                        array('', '', '', ''), $this->saveHTML()));

        return trim($output);

    }

}


用法

$dom = new MyDOMDocument();
$dom->loadHTML($code);

var_dump($dom->getElementById("galeria_list"));

echo $dom->output();

关于php - PHP Dom未检索元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2477790/

10-09 01:52