PHP : Function Reference : DOM XML Functions : DomNode->clone_node
Warning: This function is
currently not documented; only the argument list is
available.
hrz
Passing boolean 'true' as the argument to this function will result in all child nodes being cloned as well.
krymsonwulf
It seems like this function is non-recursive: cloning a node will not clone it's child nodes in my experience
r dot kamstra
if a DomNode is duplicated it's siblings and parent are not duplicated
andrew
As of version 4.3 PHP doesn't support Appending a child from another source document. If you are trying to import information from multiple sources into a final document [for transformation using XSL as an example] then you can have problems. This technique can be used to do it though.
I am assuming you have two documents open, $xmldoc1 and $xmldoc2 and you have selected [via XPath or explicit searching] the nodes you want in each document. Thus $xmldoc1_appending_node is the node you would like to add $xmldoc2_importnode to.
<?
// first we create a temporary node within the document we want to add to.
$temp_importnode = $xmldoc1->create_element("import");
// now we have a node that is in the right document context we can clone the one we want into this one.
$temp_importnode = $xmldoc_importnode->clone_node(true);
// by using true in the above call to clone_node() we copy all of the child nodes as well. Use false or nothing if you just want the containing node with no children.
$xmldoc1_appending->append_child($importnode);
?>
Now your document contains the new nodes imported from a different document.
sworley
A complete, executable, minimal example of how to copy between documents:
<?
$doc1 = domxml_open_mem('<one><onething/></one>');
$doc2 = domxml_open_mem('<two><twothing/></two>');
$root1 = $doc1->document_element();
$root2 = $doc2->document_element();
$root1->append_child($root2->clone_node(true));
echo $doc1->dump_mem();
?>
Emits: <one><onething/><two><twothing/></two></one>
|