Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche 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 17/12/2010, 12h11   #1
Invité de passage
 
Homme
Développeur Java
Inscription : septembre 2009
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : septembre 2009
Messages : 13
Points : 3
Points : 3
Par défaut copie de noeud simpleXML dans d'autres simpleXML

Bonjour,

J'ai besoin d'ajouter des nœuds fils à un objet simpleXMLElement. Ces nœuds sont en fait déjà dans mon objet, je dois les dupliquer à d'autres endroits de l'objet.

Ainsi j'ai :
Code :
1
2
3
4
5
6
7
 
<parent>
   <fils>
       <nom>foo</nom>
       <prenom>bar</prenom>
   <fils/>
<parent/>
J'aimerai pouvoir dupliquer l'un de ses fils (comme suit):
Code :
1
2
3
4
5
6
7
8
9
10
11
 
<parent>
   <fils>
       <nom>foo</nom>
       <prenom>bar</prenom>
   <fils/>
   <fils>
       <nom>foo</nom>
       <prenom>bar</prenom>
   <fils/>
<parent/>
Voire faire ce genre de choses (l'un des nœud fils possède toute l'arborescence parente):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
<parent>
   <fils>
       <parent>
             <fils>
                   <nom>foo</nom>
                   <prenom>bar</prenom>
              <fils/>
              <fils>
                   <nom>foo</nom>
                   <prenom>bar</prenom>
               <fils/>
       <parent/>
       <nom>foo</nom>
       <prenom>bar</prenom>
   <fils/>
   <fils>
       <nom>foo</nom>
       <prenom>bar</prenom>
   <fils/>
<parent/>
L'idée serait de récupérer l'un des nœuds, de le cloner puis de le reinjecter quelque part dans la structure de l'objet.
Code :
1
2
3
4
5
6
 
//$parent est l'objet simpleXMLElement global
$parent = simplexml_load_file($xml);
//$fils contient la référence vers le premier nœud fils. $new_fils est l'objet cloné
$new_fils = clone $fils;
//...
D'après ce que j'ai lu, ce type de manipulation serait plus efficace avec DOM. SimpleXMLElement ne supportant pas la copie.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
$parent2 = dom_import_simplexml($parent);
//un var_dump($parent2) me retourne bien un objet DOMelement mais ce dernier est vide
//echo $parent2->saveXML(); ne retourne rien non plus pourtant $parent est valide
 
//concernant l'import seul 
$parent2 = new DOMDocument;
$parent2->loadXML("".$parent->asXML()."");
//fonctionne
 
//je transforme le nœud fils 
$node = dom_import_simplexml($fils);
$new_fils2 = $parent2->importNode($node, true);
 
$parent2->documentElement->appendChild($new_fils2);
Je ne comprends pas pourquoi dom_import_simplexml() ne fonctionne pas. Y a t'il des gestions de namespace à prendre en compte?

DOMelement::importNode() aussi m'échappe un peu. Va t'il chercher dans la structure parente le nœud correspondant à $node pour me le retourner ? Si c'est le cas c'est une
étape inutile pour moi vu que je l'ai déjà dans $node ?

Je travaille avec simpleXMLelement que depuis hier et DOM depuis ce matin. Beaucoup de choses concernant la logique m'échappe encore.
Est-ce que mon objectif de copier des nœuds n'importe ou dans mon xml est impossible? Si quelqu'un a des pistes ou des éclaircissements je suis preneur.

Merci d'avance.
herotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h41.


 
 
 
 
Partenaires

Hébergement Web