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 :
J'aimerai pouvoir dupliquer l'un de ses fils (comme suit):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7<parent> <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 : Sélectionner tout - Visualiser dans une fenêtre à part
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/>
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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/>
D'après ce que j'ai lu, ce type de manipulation serait plus efficace avec DOM. SimpleXMLElement ne supportant pas la copie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 nud fils. $new_fils est l'objet cloné $new_fils = clone $fils; //...
Je ne comprends pas pourquoi dom_import_simplexml() ne fonctionne pas. Y a t'il des gestions de namespace à prendre en compte?
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 $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 nud fils $node = dom_import_simplexml($fils); $new_fils2 = $parent2->importNode($node, true); $parent2->documentElement->appendChild($new_fils2);
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.







Répondre avec citation
Partager