web-dev-qa-db-fra.com

Comment supprimer un élément avec DOMDocument?

Est-il possible de supprimer un élément du DOM chargé sans en créer un nouveau? Par exemple quelque chose comme ça:

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

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

Vous supprimez le nœud en disant au nœud parent de supprimer l'enfant:

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

Voir DOMNode::$parentNode Documents et DOMNode::removeChild() Documents .

Voir aussi:

85
hakre

Cela m'a pris un certain temps à comprendre, alors voici quelques éclaircissements:

Si vous supprimez des éléments d'une boucle (comme dans l'exemple de l'OP), vous devez boucler en arrière

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

documentation DOMNodeList : Vous pouvez modifier, et même supprimer, les nœuds d'une DOMNodeList si vous parcourez en arrière

18
alexanderbird

Facilement:

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