Quand j'appelle p>
Cet enfant est ajouté au dernier. Y a-t-il un moyen de faire de ce nouvel enfant un premier enfant? p> addChild ('acteur', 'John Doe'); code> p>
3 Réponses :
Cela ne ressemble pas à SimplexML Soutien à cela, de sorte que vous avez deux options:
Utilisez plutôt le module DOM (ou l'un des autres modules XML, probablement) et utilisez le DOMNODE :: Insérez la méthode ou p> li>
Créez un nouveau simplexmellement, copiez sur les attributs, puis ajoutez votre nouveau nœud, puis ajoutez tous les enfants de votre noeud d'origine, puis remplacez l'original avec le nouveau. P> LI > ol>
mise à jour: strong>
Après un peu plus de plus sur les documents, je suggérerais quelque chose comme ce qui suit (en supposant que vous souhaitiez toujours rester avec SimplexML pour la plupart, sinon, utilisez simplement DOM directement pour tout): P> $dom_elem = dom_import_simplexml($simple_xml_element);
$dom_elem->insertBefore(dom_import_simplexml($new_element), $dom_elem->firstChild);
J'utilise déjà la 2e approche. Mais cela avait l'air laids alors pensé à demander de meilleures alternatives.
En supposant que vous puissiez utiliser la fonction insertion_before Vous pouvez utiliser la fonction suivante: p>
Fonction PrependChild (parent, nœud) { parent.inserbefore (noeud, parent.firstchild); } p>
référence source: XML Questions: Au-delà du DOM a> p>
Comme il a été mentionné, SimplexML ne prend pas en charge que vous devez utiliser DOM. Voici ce que je recommande: étendre le simplexmlellement avec tout ce que vous devez utiliser dans vos programmes. De cette façon, vous pouvez garder toute la manipulation DOM et une autre magie XML en dehors de votre programme actuel. En conservant les deux points distincts, vous améliorez la lisibilité et la maintenabilité.
Voici comment prolonger SimplexMlelElement avec une nouvelle méthode PrependChild (): P>
class my_node extends SimpleXMLElement { public function prependChild($name, $value) { $dom = dom_import_simplexml($this); $new = $dom->insertBefore( $dom->ownerDocument->createElement($name, $value), $dom->firstChild ); return simplexml_import_dom($new, get_class($this)); } } $actors = simplexml_load_string( '<actors> <actor>Al Pacino</actor> <actor>Zsa Zsa Gabor</actor> </actors>', 'my_node' ); $actors->addChild('actor', 'John Doe - last'); $actors->prependChild('actor', 'John Doe - first'); die($actors->asXML());
Appel à la méthode non définie SimplexMlelement :: PrependChild ()