$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/