如何使用DOMDocument删除元素?

2022-08-30 10:48:51

是否可以在不创建新元素的情况下从加载中删除元素?例如,像这样:DOM

$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadHTML($html);

foreach($dom->getElementsByTagName('a') as $href)
    if($href->nodeValue == 'First')
        //delete

答案 1

您可以通过告诉父节点删除子节点来删除节点:

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

请参阅 DOMNode::$parentNodeDocsDOMNode::removeChild()Docs

另请参阅:


答案 2

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

如果要从循环中删除元素(如 OP 的示例所示),则需要向后循环

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

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


推荐