|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2003-03-04 00:53 UTC] bobsledbob at yahoo dot com
Quoth the manual:
(PHP >= 4.3) The new child newnode is first unlinked from its existing context, if it already existed in a document. Therefore the node is moved and not copies anymore. This is the behaviour according to the W3C specifications. If you want to duplicate large parts of a xml document, use DomNode->clone_node() before appending.
It seems that the appended node is not unlinked in 4.3.0 as the manual suggests? Here's my test script:
$xml = "<?xml version=\"1.0\" ?>";
$xml .= "<root>";
$xml .= "<node1 />";
$xml .= "<node2 />";
$xml .= "</root>";
$dom =& domxml_open_mem($xml);
$root =& $dom->document_element();
$nodeArray =& $root->child_nodes();
$node1 =& $nodeArray[0];
$node2 =& $nodeArray[1];
$node1->append_child($node2);
echo str_replace(" ", " ", str_replace("\n", "<br>\n", htmlentities($dom->dump_mem(1))));
echo "Php Version: " . phpversion() . "<br>\n";
And here's my results:
<?xml version="1.0" ?>
<root>
<node1>
<node2/>
</node1>
<node2/>
</root>
Php Version: 4.3.0
Thanks.
Adam
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Oct 30 22:00:01 2025 UTC |
here's the patch against 4.3.0. Didn't apply it now, have to do some tests before... Index: php_domxml.c =================================================================== RCS file: /repository/php4/ext/domxml/php_domxml.c,v retrieving revision 1.218.2.8 diff -u -r1.218.2.8 php_domxml.c --- php_domxml.c 10 Jan 2003 18:05:02 -0000 1.218.2.8 +++ php_domxml.c 4 Mar 2003 12:13:21 -0000 @@ -2308,8 +2308,8 @@ RETURN_FALSE; } - /* first unlink node, if child is already a child of parent */ - if (child->parent == parent){ + /* first unlink node, if child is already in the tree */ + if (child->doc == parent->doc && child->parent != NULL){ xmlUnlinkNode(child); } chregu