如何用DOMDocument删除元素?

是否有可能从加载的DOM删除元素而不创build一个新的? 比如像这样的东西:

 $dom = new DOMDocument('1.0', 'utf-8'); $dom->loadHTML($html); foreach($dom->getElementsByTagName('a') as $href) if($href->nodeValue == 'First') //delete 

通过告诉父节点删除该子节点来删除该节点:

 $href->parentNode->removeChild($href); 

请参阅DOMNode::$parentNode DocsDOMNode::removeChild() Docs

另见:

  • 如何使用PHP DOMDocument去除属性?
  • 如何使用DOMDocument类去除HTML元素

容易:

 $href->parentNode->removeChild($href); 

这花了我一段时间才弄清楚,所以这里有一些澄清:

如果你从循环中删除元素(如在OP的例子中), 你需要向后循环

 $elements = $completePage->getElementsByTagName('a'); for ($i = $elements->length; --$i >= 0; ) { $href = $elements->item($i); $href->parentNode->removeChild($href); } 

DOMNodeList文档 :如果向后迭代,则可以修改,甚至删除DOMNodeList中的节点