2009-06-18 24 views
1

Ich habe eine XML-Datei mit einer großen Anzahl von Tags. es hat mehr als 2000 Tags hier und da. Ich möchte alle diese htmlText Tag löschen und speichern Sie es als ein neues XML. Wie macht man das in PHP ??? hier der Code ist tht iamPHP XML-Knoten löschen

$remove = $doc->getElementsByTagName('htmlText'); 
$doc->removeChild($remove); 

Antwort

4

Diese beiden Lösungen unter Verwendung funktionieren soll:

$elements = $doc->getElementsByTagName('htmlText'); 
while ($elements->length > 0) { 
    $elements->item(0)->parentNode->removeChild($elements->item(0)); 
} 

oder Schleife rückwärts

$elements = $doc->getElementsByTagName('htmlText'); 
for ($i = $elements->length-1; $i >= 0; $i--) { 
    $elements->item($i)->parentNode->removeChild($elements->item($i)); 
} 

Mit foreach wie bereits weiter oben erwähnt, oder von 0 Looping nach oben, wird nicht funktionieren, weil die Knotenliste während der Schleife geändert wird. Sie können diesen Test mit dem folgenden Ausschnitt:

$doc = new DOMDocument(); 
$doc->loadHTML('<p>first</p><p>second</p><p>third</p>'); 
foreach ($doc->getElementsByTagName('p') as $el) { 
    $el->parentNode->removeChild($el); 
} 
echo $doc->saveHTML(); 

Hier wird die Knotenliste enthalten 3 Elemente: 0 => zuerst, 1 => Sekunde, 2 => Drittel. Wenn Sie es ausführen, sehen Sie, dass das zweite Element nicht entfernt wird, da die erste Iteration das Element bei Index 0 ('first') entfernt und die Knotenliste nur mit zwei Elementen (0 => Sekunde, 1 => dritte) verlässt. Die nächste Iteration entfernt das Element am Index 1 (dritte) und die Schleife endet. Wenn Sie das Dokument dann speichern, bleibt das zweite Element unverändert. Was Sie wahrscheinlich erlebt haben, als Sie gesagt haben "es löscht nur einige von ihnen" auf den vorherigen Vorschlag.

+0

Brilliant, arbeitete wie ein Charme. –