2013-03-07 17 views
26

È possibile eliminare elementi dal carico DOM senza crearne uno nuovo? Per esempio qualcosa di simile:Come eliminare l'elemento con DOMDocument?

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

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

possibile duplicato di [PHP: Impossibile rimuovere il nodo da DomDocument] (http://stackoverflow.com/questions/3602207/php-cant-remove-node-from-domdocument) – hakre

risposta

72

Si rimuove il nodo dicendo al nodo padre per rimuovere il bambino:

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

Vedi DOMNode::$parentNodeDocs e DOMNode::removeChild()Docs.

Vedi pure:

+2

Hehe :) abbiamo dato quasi allo stesso secondo la * stessa * risposta. – hek2mgl

+2

Sì, non ci sono molte opzioni su come farlo. Ora ho aggiunto alcuni collegamenti in modo da renderlo una risposta reale, ma in realtà odora come un candidato duplicato. Almeno uno dovrebbe scegliere una buona domanda correlata. – hakre

15

facilmente:

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

(duplicato) esattamente come l'utente hakre ... –

+2

@PeterKrauss Abbiamo risposto esattamente allo stesso tempo, strano che non ho ricevuto alcun upvotes =/ – silkfire

+1

Sì, scusa (!) ... ora vedo l'ora . Hai bisogno di cancellare il mio commento? –

7

Questo mi ha preso un po 'per capire, quindi ecco qualche chiarimento:

Se stai eliminando elementi all'interno di un ciclo (come nell'esempio del PO), è necessario ciclo all'indietro

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

DOMNodeList documentation: È possibile modificare e anche cancellare, nodi da un DOMNodeList se si scorre all'indietro