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(" ", "&nbsp;&nbsp;", 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

Reply via email to