Подтвердить что ты не робот

Клонирование и добавление DOMElement: "Неверная ошибка документа"

Что-то я не совсем понимаю о node клонировании с PHP DOM api. Вот пример файла, который быстро дублирует проблему, с которой я сталкиваюсь.

$doc  = new DOMDocument( '1.0', 'UTF-8' );
$root = $doc->createElement( 'root' ); // This doesn't work either $root = new DOMElement( 'root' );
$doc->appendChild( $root );

$doc2  = new DOMDocument( '1.0', 'UTF-8' );
$root2 = $doc2->createElement( 'root2' );
$doc2->appendChild( $root2 );

// Here comes the error
$root2->appendChild( $root->cloneNode() );

При запуске этого маленького фрагмента исключается исключение

Неустранимая ошибка: исключение для исключения "DOMException" с сообщением "Неправильно Ошибка документа"

Могу ли я не взять node из документа, клонировать его, а затем добавить в другой документ?

4b9b3361

Ответ 1

Используйте DOMDocument->importNode, чтобы импортировать node в другой документ, прежде чем добавлять его в DOM.

Ответ 2

Вам нужно добавить в DOM результат метода importNode. Имейте в виду, что метод может возвращать false, когда его нельзя импортировать

if ($importedNode = $doc2->importNode($root->cloneNode())) {
    $root2->appendChild($importedNode);
}

Если вам нужно импортировать node, все его дочерние узлы (resursively) и/или атрибуты node используют необязательный второй параметр deep:

if ($importedNode = $doc2->importNode($root->cloneNode(), true)) {
    $root2->appendChild($importedNode);
}