ID: 22530 Updated by: [EMAIL PROTECTED] Reported By: bobsledbob at yahoo dot com -Status: Assigned +Status: Closed Bug Type: DOM XML related Operating System: Linux PHP Version: 4.3.0 Assigned To: chregu New Comment:
This bug has been fixed in CVS. In case this was a PHP problem, snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. In case this was a documentation problem, the fix will show up soon at http://www.php.net/manual/. In case this was a PHP.net website problem, the change will show up on the PHP.net site and on the mirror sites in short time. Thank you for the report, and for helping us make PHP better. And fixed in PHP_4_3 branch Previous Comments: ------------------------------------------------------------------------ [2003-03-04 06:14:32] [EMAIL PROTECTED] 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 ------------------------------------------------------------------------ [2003-03-04 05:45:05] [EMAIL PROTECTED] yep. wrong. it just unlinks the node, if it's a child of the parent node ($node1 in your case). I'll fix that. chregu ------------------------------------------------------------------------ [2003-03-04 00:53:02] 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 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=22530&edit=1