ID: 22530
Updated by: [EMAIL PROTECTED]
Reported By: bobsledbob at yahoo dot com
Status: Assigned
Bug Type: DOM XML related
Operating System: Linux
PHP Version: 4.3.0
Assigned To: chregu
New Comment:
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
Previous Comments:
------------------------------------------------------------------------
[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