2009-06-18 12 views
1

J'ai un fichier XML avec un grand nombre de tags. il a plus de 2000 étiquettes ici et là. Je veux supprimer tout ce que htmlText Tag et enregistrez-le comme un nouveau xml. comment faire ça en PHP ??? est ici le code tht iam utilisantSuppression du noeud XML PHP

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

Répondre

4

Ces deux solutions devraient fonctionner:

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

ou boucle arrière

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

En utilisant foreach comme suggéré plus haut, ou en boucle de 0, ne fonctionnera pas parce que la liste des nœuds est modifiée lorsque vous bouclez. Vous pouvez le tester avec le code suivant:

$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(); 

Voici la liste de noeuds contient 3 éléments: 0 => premier, 1 => secondes, 2 => troisième. Si vous l'exécutez, vous verrez que le second élément n'est pas supprimé car la première itération supprime l'élément à l'index 0 ('first'), laissant la liste des nœuds avec seulement 2 éléments (0 => second, 1 => third). L'itération suivante supprime l'élément à l'index 1 (troisième) et la boucle se termine. Si vous enregistrez ensuite le document, vous verrez que le second élément reste intact. Ce qui est probablement ce que vous avez ressenti lorsque vous avez dit "il n'en supprime que quelques-uns" à la suggestion précédente.

+0

Brillant, travaillé comme un charme. –

Questions connexes