2009-07-21 3 views
2

La méthode "addChild" de SimpleXMLElement semble être le bon choix, mais elle ne prend apparemment que des chaînes représentant la variable du nouvel enfant.Existe-t-il un moyen d'ajouter un PHP SimpleXMLElement à un autre SimpleXMLElement?

Il existe la notation objet-ish pour référencer des nœuds de l'arbre et les définir, par ex. $ simpleXMLNode-> child = value, mais cela ne semble fonctionner que pour les valeurs texte/numériques simples. Si je effectuez les opérations suivantes:

$s = new SimpleXMLElement('<root/>'); 
$t = new SimpleXMLElement('<child/>'); 
$s->a = $t; 
echo $s->asXML() 

Je reçois:

<?xml version="1.0"?> 
<root><a></a></root> 

quand j'espérais:

<?xml version="1.0"?> 
<root><a><child/></a></root> 

Je pensais que la conversion $ t en une chaîne, puis l'ajouter (après suppression de la déclaration XML):

$s->a = substr($t->asXML(),22) 

Mais cela donne:

<?xml version="1.0"?> 
<root><a>&lt;child/&gt;</a></root> 

Encore une fois, pas ce que j'espérais.

Existe-t-il une manière typique d'accomplir ce genre de chose avec SimpleXML?

+0

Copie possible de [PHP - SimpleXML - AddChild avec un autre SimpleXMLElement] (http://stackoverflow.com/questions/4778865/php-simplexml-addchild-with-another-simplexmlelement) – Ben

Répondre

7

Hey inconnu. Vous devez utiliser l'interface DOMElement à vos objets SimpleXML pour y parvenir.

<?php 

$s = new SimpleXMLElement('<root/>'); 
$t = new DOMElement('child'); 

$dom = dom_import_simplexml($s); 
$dom->appendChild($t); 

echo $s->asXML(); 
// <root><child/></root> 

Si vous avez besoin de plus de détails, n'hésitez pas à me contacter. Il y a plusieurs exemples dans la documentation et les commentaires pour la méthode dom_import_simplexml() aussi: http://php.net/dom_import_simplexml

1

Je ne suis pas sûr que cela puisse vous aider mais vous pouvez également étendre SimpleXML pour qu'il fonctionne comme prévu. Voici un projet sur lequel j'ai travaillé pour la classe bLibrary Xml. Vous pouvez le regarder pour adapter SimpleXml pour fonctionner comme vous l'attendez.

Questions connexes