php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #37277 cloning Dom Documents or Nodes does not work
Submitted: 2006-05-02 15:04 UTC Modified: 2006-05-03 08:45 UTC
From: frank at cleverbridge dot com Assigned: rrichards (profile)
Status: Closed Package: DOM XML related
PHP Version: 5.1.3 OS: Linux 2.6.12-1.1381_FC3 i686 ath
Private report: No CVE-ID: None
 [2006-05-02 15:04 UTC] frank at cleverbridge dot com
Description:
------------
Since 5.1.3 you cannot copy a dom object. References still work. The implementation of the xml extension seam to have changed.

Reproduce code:
---------------
Since 5.1.3 the following code does not work anymore:

<?php

$dom1 = new DomDocument('1.0', 'UTF-8');

$xml = '<foo />';
$dom1->loadXml($xml);

print "<xmp>\n".$dom1->saveXML()."</xmp>\n";

$node = clone $dom1->documentElement;

$dom2 = new DomDocument('1.0', 'UTF-8');
$dom2->appendChild($dom2->importNode($node->cloneNode(true), TRUE));

print "<xmp>\n".$dom2->saveXML()."</xmp>\n";

$dom3 = clone $dom1;

print "<xmp>\n".$dom3->saveXML()."</xmp>\n";

?>

Expected result:
----------------
<?xml version="1.0"?>
<foo/>

<?xml version="1.0"?>
<foo/>

<?xml version="1.0"?>
<foo/>


Actual result:
--------------
&lt;?xml version="1.0"?&gt; &lt;foo/&gt;
Warning: DOMNode::cloneNode() [function.DOMNode-cloneNode]: Couldn't fetch DOMElement in /www/content/
spielzeug/xslt/513.php on line 13

Warning: DOMDocument::importNode() expects parameter 1 to be DOMNode, null given in /www/content/
spielzeug/xslt/513.php on line 13

Warning: DOMNode::appendChild() expects parameter 1 to be DOMNode, null given in /www/content/
spielzeug/xslt/513.php on line 13
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
Warning: DOMDocument::saveXML() [function.DOMDocument-saveXML]: Couldn't fetch DOMDocument in /www/content/
spielzeug/xslt/513.php on line 19

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2006-05-02 20:32 UTC] rrichards@php.net
Fix is coming. Until then use the cloneNode() method instead of the clone keyword.
 [2006-05-03 08:45 UTC] rrichards@php.net
This bug has been fixed in CVS.

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/.
 
Thank you for the report, and for helping us make PHP better.


 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 11:01:29 2024 UTC