Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/05/2007, 17h34   #1
Invité régulier
 
Inscription : janvier 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 14
Points : 5
Points : 5
Par défaut [DOM] problème de suppression de noeuds

Bonjour ,

Voila je rencontre le problème suivant , je souhaiterais lors d'un traitement supprimer tout les enfants d'une balise donné , mais étrangement seul un enfant sur 2 est supprimés
Voila le bout de code qui s'occupe de la suppression :

Code :
1
2
3
4
5
6
7
8
9
 
 $tmx = new DOMDocument();
 $tmx->load($fichier);
 $body = $tmx->getElementsByTagName("body")->item(0);//récuperation de l'objet body
 
 foreach ($body->getElementsByTagName("tu") as $tu){
 	echo $tu->getAttribute("tuid");//uniquement pour voir les elements parcouru
 	$body->removeChild($tu);
 }
Le foreach fait son boulot puisque lorsque je met la ligne avec le removeChild en commentaire , tout les enfant sont parcouru , en revanche avec le remove il semblerais qu'il avance d'une position en meme temp qu'il fait la suppression .

Comment contourner ce probleme ? et est-ce normal que la suppressoin d'un element saute l'element d'apres ?

Voila si quelqu'un peut m'aider
-Ju- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 18h26   #2
Membre éclairé
 
Avatar de Asmodean
 
Inscription : février 2006
Messages : 311
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France

Informations forums :
Inscription : février 2006
Messages : 311
Points : 346
Points : 346
Envoyer un message via MSN à Asmodean
si removeChild se comporte comme ça, quelque chose comme ça

Code :
while($body->removeChild($tu))
devrait marcher. Mais j'avoue que ca fait longtemps que j'en ai pas fait donc je me rappelle plus trop de son comportement.
Asmodean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 19h18   #3
Invité régulier
 
Inscription : janvier 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 14
Points : 5
Points : 5
En fait le problème ne venait pas de la méthode removeChild() mais de la structure

En fait je supprimais l'élément sur lequel la boucle foreach était positionné , donc il passait a l'élément suivant avant la fin de celle ci , d'ou un élément sur deux non traité , enfin je pense que c'est ce qui se passait

C'est donc finalement bien un while qui m'aura sortie d'affaire , merci

Voila la solution pour ceux que ca intéresse :

Code :
1
2
3
4
5
6
7
8
 $tmx = new DOMDocument();
 $tmx->load($fichier);
 $body = $tmx->getElementsByTagName("body")->item(0);//récuperation de l'objet body
 
 
 while($tu = $body->getElementsByTagName("tu")->item(0)) {
 	$body->removeChild($tu);
 }
-Ju- est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h09.


 
 
 
 
Partenaires

Hébergement Web