2013-03-07 14 views
26

Ist es möglich, das Element von geladen DOM zu löschen, ohne ein neues zu erstellen? Zum Beispiel so etwas wie diese:Wie lösche Element mit DOMDocument?

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

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

möglich Duplikat [PHP: entfernen kann nicht Knoten aus DomDocument] (http://stackoverflow.com/questions/3602207/php-cant-remove-node-from-domdocument) – hakre

Antwort

72

entfernen Sie den Knoten durch den übergeordneten Knoten zu sagen, das Kind zu entfernen:

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

Siehe DOMNode::$parentNodeDocs und DOMNode::removeChild()Docs.

Siehe auch:

+2

Hehe :) Wir gaben fast zur selben Sekunde die * gleiche * Antwort. – hek2mgl

+2

Ja, es gibt nicht viele Möglichkeiten, das zu tun. Ich habe jetzt einige Links hinzugefügt, um eine tatsächliche Antwort zu erhalten, aber das riecht tatsächlich nach einem doppelten Kandidaten. Zumindest sollte man eine gute verwandte Frage auswählen. – hakre

15

Leicht:

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

(dupliziert) genau das gleiche wie user hakre ... –

+2

@PeterKrauss Wir antworteten zur exakt selben zeit, komisch, dass ich keine upvotes bekommen habe =/ – silkfire

+1

Ja, sorry (!) ... jetzt sehe ich die zeit . Müssen Sie meinen Kommentar löschen? –

7

Das hat mich eine Weile, um herauszufinden, so dass hier eine Klarstellung:

Wenn Sie Elemente aus innerhalb einer Schleife (wie in den OPs Beispiel) zu löschen, Sie müssen Schleife rückwärts

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

DOMNodeList documentation: Sie können das ändern und sogar löschen, Knoten aus einem DOMNodeList wenn Sie iterieren rückwärts