[DOM] recuperer la valeur de l index d'un DOMNode

Eléphanteau du PHP | 14 Messages

13 juil. 2005, 15:51

Bonjour tout le monde !

Je n'ai toujours pas trouvé une solution pour supprimer un noeud dans un fichier XML.

Voici le products_test.xml que je veux editer :

Code : Tout sélectionner

<?xml version='1.0'?> <chambre> <armoire> <tiroir>feuilles</tiroir> </armoire> <armoire> <tiroir>crayons</tiroir> </armoire> <armoire> <tiroir>gommes</tiroir> </armoire> </chambre>
En fait je veux supprimer le noeud <armoire> contenant le noeud fils <tiroir>gommes</tiroir>. Je ne sais pas comment obtenir l'index du noeud parent au noeud <tiroir>gommes</tiroir>.

Voici mon script :
$db = new DomDocument;
$db->preserveWhiteSpace = false;
$db->formatOutput = true;
$db->load("products_test.xml");

$chambre = $db->documentElement;	
$noeuds_armoire = $chambre->childNodes;
$noeuds_tiroirs = $noeuds_armoire->item(0)->childNodes;	

$tiroirs = $chambre->getElementsByTagName('tiroir');
	foreach ($tiroirs as $tiroir){
		print $tiroir->nodeName . "\n" . "<br>";
		if ($tiroir->firstChild->nodeValue == "gommes"){
			$noeud_parent = $tiroir->parentNode->????getIndex????;
			print "noeud parent du noeud contenant feuille: $noeud_parent <br>";
$chambre->removeChild($noeuds_armoire->item($noeud_parent));	
		}
	}
En fait, je ne sais pas comment recupere l'index d'un noeud particulier ...

J'ai essayé ca, mais ... ca ne marche pas :
$noeud_parent = $tiroir->parentNode->????getIndex????;
			$chambre->removeChild($noeuds_armoire->item(??? variable that holds the index));
J'ai essayé de faire ca "a la main" en donnant l'index du noeud a supprimer (ex : 2) et cela marche tres bien.

Avez vous une idée de comment resoudre mon probleme ?

Merci d'avance et bon week end !

Eléphant du PHP | 104 Messages

13 juil. 2005, 18:58

Salut,

Il y a un type d'attribut "ID" en XML.
http://blog.bitflux.ch/wiki/GetElementById_Pitfalls

Eléphanteau du PHP | 14 Messages

13 juil. 2005, 20:17

Merci de ta réponse !

Je ne peux pas utiliser cette fonction car mon fichier XML est structuré sans attributs dans les balises.

Je suis donc obligé de trouver une autre méthode pour séléctionner un noeud armoire contenant un fils avec le contenu chaussettes parmis plein d occurences existantes ...

ex :

Code : Tout sélectionner

<chambre> <armoire> <tiroir>chaussettes</tiroir> </armoire> <armoire> <tiroir>tshirts</tiroir> </armoire> </chambre>
Je ne vois toujours pas de solutions pour le moment. En effet, la liste de Noeud contient differents noeuds dont la seule facon de les ditinguer est par leur index ...

A bientot

Une idée ?? :)[/code]

Eléphant du PHP | 104 Messages

13 juil. 2005, 20:35


Invité
Invité n'ayant pas de compte PHPfrance

13 juil. 2005, 22:39

Oui merci de ce remarquable lien, j'avais qd meme compris qu'il était possible d'attaquer un noeud en specifiant son item.

Le probleme etant que je ne connais pas l item du noeud et que c est cela que je cherche ... :shock:

Un développeur de Zend.com a repondu a ma requete :

http://www.zend.com/phorum/read.php?num ... hread=2677

Eléphant du PHP | 104 Messages

14 juil. 2005, 05:00

Bonjour la solution ! Je ne vois pas en quoi il utilise des index ? Si tu as un fichier XML avec 50 tiroirs avec 50 objets différents, tu vas écrire 50 conditions if() ?!

De plus sur le forum de Zend tu précises que tu utilises PHP 5, et à mon avis il y a d'autres outils que DOM ou bien c'est une contrainte et tu n'as pas le choix ?