DOMDocument::importNode

(PHP 5, PHP 7, PHP 8)

DOMDocument::importNodeImporte un nœud dans le document courant

Description

public DOMDocument::importNode(DOMNode $node, bool $deep = false): DOMNode|false

Cette fonction retourne une copie du nœud à importer et l'associe avec le document courant.

Liste de paramètres

node

Le nœud à importer.

deep

Si défini à true, cette méthode importera récursivement le sous-arbre situé sous le nœud node.

Note:

Pour copier les attributs des nœuds, le paramètre deep doit être défini à true

Valeurs de retour

Le nœud copié ou false si la copie a échoué.

Erreurs / Exceptions

Une DOMException est lancée si le nœud ne peut pas être importé.

Exemples

Exemple #1 Exemple avec DOMDocument::importNode()

Copie de nœuds entre plusieurs documents.

<?php

$orgdoc
= new DOMDocument;
$orgdoc->loadXML("<root><element><child>Texte dans un fils</child></element></root>");

// Le nœud que nous voulons importer dans le nouveau document
$node = $orgdoc->getElementsByTagName("element")->item(0);


// Création du nouveau document
$newdoc = new DOMDocument;
$newdoc->formatOutput = true;

// Ajout de quelques balises
$newdoc->loadXML("<root><someelement>Texte dans un élément</someelement></root>");

echo
"Le nouveau document avant d'y copier le nœud :\n";
echo
$newdoc->saveXML();

// Importation du nœud, ainsi que tous ses fils, dans le document
$node = $newdoc->importNode($node, true);
// Et on l'ajoute dans le nœud racine "<root>"
$newdoc->documentElement->appendChild($node);

echo
"\nLe nouveau document après y avoir copié les nœuds :\n";
echo
$newdoc->saveXML();
?>

L'exemple ci-dessus va afficher :

Le nouveau document avant d'y copier le nœud :
<?xml version="1.0"?>
<root>
  <someelement>Texte dans un élément</someelement>
</root>

Le nouveau document après y avoir copié les nœuds :
<?xml version="1.0"?>
<root>
  <someelement>Texte dans un élément</someelement>
  <element>
    <child>Texte dans un fils</child>
  </element>
</root>

add a note

User Contributed Notes 2 notes

up
4
c dot 1 at smithies dot org
16 years ago
Assume that $source and $dest are instances of DOMDocument. Assume that $sourcedoc contains an element with ID 'sourceID' and that $destdoc contains an element with ID 'destID'. Assume that we have already set up source and destination element variables thus:

<?php
 $src = $sourcedoc->getElementById('sourceID');
 $dst = $destdoc->getElementById('destID');
?>

Finally, assume that $sel has more than one child node.

In order to import the child elements of $src as children of $dst, you might do something like this:

<?php
$src = $dest->importNode($src, TRUE);

foreach ($src->childNodes as $el) $dst->appendChild($el);
?>

But this does not work. foreach gets confused, because (as noted below) appending an imported element to another existing element in the same document causes it to be removed from its current parent element.

Therefore, the following technique should be used:

<?php
foreach ($src->childNodes as $el) $dst->appendChild($destdoc->importNode($el, TRUE));
?>
up
3
Fitopaldi
20 years ago
importNode returns a copy of the node to import and associates it with the current document, but not import the node to the current DOMDocument. Use appendChild for import the copy of the node to current DOMDocument.

<?
 $domNode = $dom->importNode($aDomNode, true);
 $currentDomDocument->appendChild($domNode);
?>
To Top