我正在尝试使用dom文档提取特定的HTML块。
我的代码如下:
$domd = new DOMDocument('1.0', 'utf-8');
$domd->loadHTML($string);
$this->hook = 'content';
if($this->hook !== '') {
$main = $domd->getElementById($this->hook);
$newstr = "";
foreach($main->childNodes as $node) {
$newstr .= $domd->saveXML($node, LIBXML_NOEMPTYTAG);
}
$domd->loadHTML($newstr);
}
//MORE PARSING USING THE DOMD OBJECT
它很有效但是foreach很慢,我想知道是否有更聪明的方法。我正在将HTML重新加载到$ domd中,以便我可以继续编辑。在我的脑海里,我觉得我应该保存一个片段,而不是将保存的$ newstr重新加载到对象中。
这可以更优雅或更快吗?
谢谢!
答案 0 :(得分:1)
我假设您要改变现有的$domd
文档,将其完全替换为您从该内容节点获取的子节点:
更新:刚才意识到,由于您使用loadHTML
重新加载,因此您可能希望保留它创建的html
/ body
个节点。以下代码已调整为空body
并将片段附加到其中:
$domd = new DOMDocument('1.0', 'utf-8');
$domd->loadHTML($string);
$this->hook = 'content';
if($this->hook !== '') {
$main = $domd->getElementById($this->hook);
$fragment = $domd->createDocumentFragment();
while($main->hasChildNodes()) {
$fragment->appendChild($main->firstChild);
}
$body = $domd->getElementsByTagName("body")->item(0);
while($body->hasChildNodes()) {
$body->removeChild($body->firstChild);
}
$body->appendChild($fragment);
}
//MORE PARSING USING THE DOMD OBJECT