J'ai une simple chaîne XML:PHP/SimpleXML. Comment ajouter un enfant au noeud renvoyé par xpath?
$sample = new SimpleXMLElement('<root><parent><child1></child1></parent></root>');
et j'essaie de trouver le noeud avec XPath() et ajoutez l'enfant à ce noeud.
$node = $sample->xpath('//parent');
$node[0]->addChild('child2');
echo $sample->asXML();
Comme vous le voyez child2
est ajouté en tant qu'enfant de child1
, non pas comme un enfant de parent
. Mais si je change mon XML, addChild() fonctionne très bien.
<root>
<parent>
<child1>
<child2></child2>
</child1>
</parent>
</root>
Ce code
$sample = new SimpleXMLElement('<root><parent><child1><foobar></foobar></child1></parent></root>');
$node = $sample->xpath('//parent');
$node[0]->addChild('child2');
echo $sample->asXML();
retours
<root>
<parent>
<child1>
<foobar></foobar>
</child1>
<child2>
</child2>
</parent>
</root>
J'ai donc deux questions:
- Pourquoi?
- Comment puis-je ajouter
child2
en tant qu'enfant deparent
, sichild1
n'a pas d'enfant? Xpath() renvoie les ENFANTS de l'élément qui lui a été transmis.
Quelle version de PHP et libxml2 utilisez-vous? Votre code "cassé" [fonctionne pour moi] (http://3v4l.org/JiGAf#v513). – salathe
2.7.8 et 5.4 = ( –
Dans ce cas, le lien que j'ai donné montre que votre code fonctionne bien pour 2.7.8 sur 5.4.0 – salathe