(PHP 5, PHP 7, PHP 8)
DOMDocument::importNode — Импортировать узел в текущий документ
Эта функция возвращает копию импортируемого узла и связывает её с текущим документом.
Скопированный узел или false , если он не может быть скопирован.
Если узел не может быть импортирован, будет выброшено исключение DOMException .
Пример #1 Пример использования DOMDocument::importNode()
Копирование узлов между документами.
<?php
$orgdoc = new DOMDocument;
$orgdoc->loadXML("<root><element><child>text in child</child></element></root>");
// Узел, который будет импортирован в новый документ
$node = $orgdoc->getElementsByTagName("element")->item(0);
// Создание нового документа
$newdoc = new DOMDocument;
$newdoc->formatOutput = true;
// Добавление разметки
$newdoc->loadXML("<root><someelement>text in some element</someelement></root>");
echo "Новый документ перед добавлением в него узлов:\n";
echo $newdoc->saveXML();
// Импорт узла и всех его потомков в документ
$node = $newdoc->importNode($node, true);
// И затем добавление его в корневой узел
$newdoc->documentElement->appendChild($node);
echo "\nНовый документ после добавления в него узлов:\n";
echo $newdoc->saveXML();
?>Результат выполнения приведённого примера:
Новый документ перед добавлением в него узлов: <?xml version="1.0"?> <root> <someelement>text in some element</someelement> </root> Новый документ после добавления в него узлов: <?xml version="1.0"?> <root> <someelement>text in some element</someelement> <element> <child>text in child</child> </element> </root>
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));
?>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);
?>