views:

902

answers:

1

There's something I don't fully understand about node cloning with the PHP's DOM api. Here's a sample file that quickly duplicates the issue I'm coming across.

$doc  = new DOMDocument( '1.0', 'UTF-8' );
$root = $doc->createElement( 'root' ); // This doesn't work either $root = new DOMElement( 'root' );
$doc->appendChild( $root );

$doc2  = new DOMDocument( '1.0', 'UTF-8' );
$root2 = $doc2->createElement( 'root2' );
$doc2->appendChild( $root2 );

// Here comes the error
$root2->appendChild( $root->cloneNode() );

When you run this little snippet an exception is thrown

Fatal error: Uncaught exception 'DOMException' with message 'Wrong Document Error'

Can I not grab a node from a document, clone it, and then append it to another document?

+5  A: 

Use DOMDocument->importNode to import the node into the other document before adding it to the DOM.

Gumbo
Perfect, Thanks. I was searching through the `DOMNode` and `DOMElement` APIs looking for something that would let me do this and (foolishly) never checked the `DOMDocument` methods =/
Peter Bailey