PHP 8.5.4 Released!

DOMDocument::importNode

(PHP 5, PHP 7, PHP 8)

DOMDocument::importNode Импортировать узел в текущий документ

Описание

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

Эта функция возвращает копию импортируемого узла и связывает её с текущим документом.

Список параметров

node

Узел для импорта.

deep

Если установлено значение true, этот метод будет рекурсивно импортировать поддерево узла node.

Замечание:

Чтобы скопировались атрибуты узла, deep должен быть установлен в true.

Возвращаемые значения

Скопированный узел или 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>

Добавить

Примечания пользователей 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