08/04/2013 SimpleXML : transformer un enfant en racine
Soit un petit arbre en XML (disons un arbuste) dont on souhaite récupérer la branche "child" :
// l'arbre
$parent_xml='<parent><child><div>rien</div><div>nada</div></child></parent>';
// l'objet
$parent_sxe=simplexml_load_string($parent_xml);
// l'objet enfant
$child_sxe=$parent_sxe->child;
A-t-on récupéré un object équivalant à l'arbre
<child><div>rien</div><div>nada</div></child>
? On est en droit de le croire si l'on se contente de le visualiser par les moyens habituels : var_export($child_sxe), var_dump($child_sxe) ou encore var_dump($child_sxe->asXml()).
En réalité, l'objet en lui-même ne correspond pas à cet arbre. Pour s'en convaincre, il suffit d'effectuer une recherche avec XPATH :
echo $child_sxe->xpath("/*")[0]->getName();
// affichage du nom de la racine de l'objet => "parent" et non "child" :(
Deux enseignements à tirer. Déjà, les fonctions de débuggage ne fonctionnent pas correctement pour les objects simpleXml. Ensuite, pour qu'un enfant devienne une racine (c'est-à-dire le premier parent de l'arbre), on retiendra cette technique :
$child_sxe=simplexml_load_string($parent_sxe->child->asXML());
Vérification :
echo $child_sxe->xpath("/*")[0]->getName();
// affichage du nom de la racine de l'objet => "child" :)
Commentaires
Ajouter un commentaire :
- Votre commentaire a bien été posté et sera publié après validation par le webmaster du site.