suppression de noeuds en boucle

Invité
Invité n'ayant pas de compte PHPfrance

18 mai 2008, 17:50

Bonjour à tous,

Je suis entrain de tester des parseurs php pour manipler des documents xml.
Je n'en suis pas sûr, mais il me semble que le problème sera le même quelle que soit la librairie utilisée.

Mon objectif: supprimer une série de noeuds enfants grâce à une boucle for ou foreach sur l'objet php contenant les noeuds xml.

Mon problème: Les itérations sont faites sur la position du noeud (index numérique) dans l'arbre xml. Pour chaque itération/suppression, l'arbre xml est mis à jour => les index sont modifiés.

ça veut dire que ma boucle ne supprime pas les bons noeuds à chaque itération.
Je donne un exemple, le nom de la librairie utilisée importe peu:
<root>
<item></item>
<item></item>
<item></item>
<item></item>
</root>

Pour supprimer tous les items, je fais
$index = array("0","1","2","3"); //index des items à supprimer  <=> position dans l'arbre xml
$docXML =& new XML_Document();
$docXML->loadXML("monDocumentXml.xml");

$items = $docXML->getElementByTagName("root")->childNodes;
for ($i = 0; $i<count($items); $i++)
{
    //l'index des items est mis à jour à chaque itération 
   //et ne correspond plus à l'ordre initial nes noeuds enfants
    $docXML->getElementByTagName("root")->removeChild($items[$i]); 
}

Comment faire pour contouner ce problème?