DOMNode->cloneNode()

(no version information, might be only in CVS)

DOMNode->cloneNode() --  Clones a node

说明

class DOMNode {

DOMNode cloneNode ( [bool deep] )

}

Creates a copy of the node.

参数

deep

Indicates whether to copy all descendant nodes. This parameter is defaulted to FALSE.

返回值

The cloned node.


add a note add a note User Contributed Notes
oliver dot christen at camptocamp dot com
20-Nov-2004 12:48
simple exemple of node cloning

<?xml version="1.0"?>

<book type="paperback">
   <title name='MAP'>Red Nails</title>
   <price>$12.99</price>
   <author>
       <name first="Robert" middle="E" last="Howard"/>
       <birthdate>9/21/1977</birthdate>
   </author>
   <author>
       <name first="Arthur" middle="Mc" last="Kayn"/>
   </author>
</book>

<?php

//filename xml file to use
$file = 'book.xml';

$doc = new domDocument;

if (
file_exists($file)) {
  
$doc->load($file);
} else {
   exit(
'Erreur !.');
}

$xpath = new domXPath($doc);

$query = "//author/*";
$xpathQuery = $xpath->query($query);

$size = $xpathQuery->length;
for (
$i=0; $i<$size; $i++){
  
$node = $xpathQuery->item($i);
   if (
$node->nodeName == 'birthdate' && $node->hasChildNodes() && $node->firstChild->textContent != ''){
      
$clonenode = $node->cloneNode(true);
      
$refnode = $node;
   }
}
for (
$i=0; $i<$size; $i++){
  
$node = $xpathQuery->item($i);
   if (!
$node->isSameNode($refnode)){
      
$newnode = $node->appendChild($clonenode);
   }
}

print
$doc->saveXML();

?>
dtorop932 at hotmail dot com
19-Oct-2004 01:44
For those converting from PHP 4 DOM XML to PHP 5 DOM extension:

In the old days, DOM XML's clone_node() was the way to copy nodes from one DOM to another, as well as to perform intra-DOM copies.  Nowadays, DOM's cloneNode() is the intra-DOM solution, but see importNode() (http://php.net/dom-domdocument-importnode) to copy nodes from one DOM to another.

So to append root node of $dom2 and all its children into root node of $dom1:

PHP 4 (DOM XML):

<?
$root1
= $dom1->document_element();
$other_node = $dom2->document_element();
$root1->append_child($other_node->clone_node(true));
?>

PHP 5 (DOM):

<?
$dom1
->documentElement->appendChild(
 
$dom1->importNode($dom2->documentElement, true));
?>