I have two XML trees and would like to add one tree as a leaf to the other one.
Apparently:
$tree2->addChild('leaf', $tree1);
doesn't work, as it copies only the first root node.
Ok, so then I thought I would traverse the whole first tree, adding every element one by one to the second one.
But consider XML like this:
<root>
aaa
<bbb/>
ccc
</root>
How do I access "ccc"? tree1->children()
returns just "bbb"... .
You can't add a "tree" directly using SimpleXML, as you have seen. However, you can use some DOM methods to do the heavy lifting for you whilst still working on the same underlying XML.
$xmldict = new SimpleXMLElement('<dictionary><a/><b/><c/></dictionary>');
$kitty = new SimpleXMLElement('<cat><sound>meow</sound><texture>fuzzy</texture></cat>');
// Create new DOMElements from the two SimpleXMLElements
$domdict = dom_import_simplexml($xmldict->c);
$domcat = dom_import_simplexml($kitty);
// Import the <cat> into the dictionary document
$domcat = $domdict->ownerDocument->importNode($domcat, TRUE);
// Append the <cat> to <c> in the dictionary
$domdict->appendChild($domcat);
// We can still use SimpleXML! (meow)
echo $xmldict->c->cat->sound;