web-dev-qa-db-ja.com

DOMDocumentで要素を削除する方法は?

新しい要素を作成せずに、ロードされたDOMから要素を削除することは可能ですか?たとえば、次のようなものです:

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

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

親ノードに子を削除するように指示して、ノードを削除します。

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

_DOMNode::$parentNode_を参照ドキュメント および DOMNode::removeChild()ドキュメント

また見なさい:

85
hakre

これを理解するのにしばらく時間がかかったので、ここにいくつかの説明があります:

ループ内から要素を削除する場合(OPの例のように)、後方にループする必要があります

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

DOMNodeList documentation :逆方向に反復する場合、DOMNodeListからノードを変更したり、削除することもできます

18
alexanderbird

簡単に:

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