PHP
downloads | documentation | faq | getting help | mailing lists | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

DOMNode::hasAttributes> <DOMNode::appendChild
Last updated: Fri, 28 Nov 2008

view this page in

DOMNode::cloneNode

(No version information available, might be only in CVS)

DOMNode::cloneNode Clones a node

Description

DOMNode DOMNode::cloneNode ([ bool $deep ] )

Creates a copy of the node.

Parameters

deep

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

Return Values

The cloned node.



add a note add a note User Contributed Notes
DOMNode::cloneNode
oliver dot christen at camptocamp dot com
19-Nov-2004 05: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
18-Oct-2004 07: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):

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

PHP 5 (DOM):

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

DOMNode::hasAttributes> <DOMNode::appendChild
Last updated: Fri, 28 Nov 2008
 
 
show source | credits | sitemap | contact | advertising | mirror sites