|   | 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 Group All rights reserved. | Last updated: Fri Oct 31 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