Bonjour.
J'essaie actuellement de mettre à jour un fichier XML en PHP.
Pour cela, j'utilise SimpleXML et DOM.
Mon but ici est de mettre à jour le nom d'un noeud.
Il me faut donc créer un noeud avec le nouveau nom, lui associer les noeuds fils du noeud avec le précédent nom, et supprimer le noeud avec le précédent nom.
Exemple:
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <DATA> <name_1> <fils_1> <petit_fils_1>blabla</petit_fils_1> <petit_fils_2>blabla</petit_fils_2> <petit_fils_3>blabla</petit_fils_3> </fils_1> </name_1> </DATA>
Je veux remplacer 'name_1' par 'camion_1':
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <DATA> <camion_1> <fils_1> <petit_fils_1>blabla</petit_fils_1> <petit_fils_2>blabla</petit_fils_2> <petit_fils_3>blabla</petit_fils_3> </fils_1> </camion_1> </DATA>
J'ai donc mon côté PHP comme ceci:
Et voilà la fonction PHP prevToNewNode que j'ai trouvé sur le net :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 // loading the content of the corresponding XML file $xml = new SimpleXMLElement($tmpXML,null,true); // getting the entry of interest $foundNode = $xml->xpath("/DATA/name_1"); $newNode = $xml->addChild('camion'); foreach ($foundNode[0]->children() as $eachReq) { // copying each child from the previous entry to the new one prevToNewNode($xml,$eachReq,$foundNode[0]); } header("Content-type: text/xml"); $xml->saveXML($tmpXML);
Mes problèmes sont les suivants:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function prevToNewNode(SimpleXMLElement $to, SimpleXMLElement $from, SimpleXMLElement $parentNode) { $toDom = dom_import_simplexml($to); $fromDom = dom_import_simplexml($from); $parentDom = dom_import_simplexml($parentNode); $toDom->removeChild($toDom->ownerDocument->importNode($parentDom, true)); $toDom->appendChild($toDom->ownerDocument->importNode($fromDom, true)); }
- Le précédent noeud est bel et bien supprimé
- Le noeud créé s'ajoute bel et bien à mon fichier XML
- MAIS le noeud créé ne comporte qu'un seul tag ! Exemple:
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <DATA> <camion_1/> <fils_1> <petit_fils_1>blabla</petit_fils_1> <petit_fils_2>blabla</petit_fils_2> <petit_fils_3>blabla</petit_fils_3> </fils_1> </DATA>
Je n'ai donc pas de tag qui clôt mon nouveau noeud, et un "tag d'ouverture" créé comme s'il n'avait pas de contenu.
Est-ce un problème de conversion DOM <=> SimpleXML ?
Comment résoudre mon problème ?
Merci beaucoup !








Répondre avec citation



Partager