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

Есть кое-что, что я не совсем понимаю о клонировании узлов с помощью 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() ); 

Когда вы запускаете этот небольшой фрагмент, исключается исключение

  • DOM-манипуляция в PHP
  • Лучший способ передать массив между PHP и Javascript
  • PHP DOMElement :: getElementsByTagName - В любом случае, чтобы получить сразу же подходящих детей?
  • Получение текста узла в PHP DOM
  • Как обрабатывать частичный HTML?
  • DOM, который позволяет использовать тег </ in <script> HTML5
  • Неустранимая ошибка: исключить исключение «DOMException» с сообщением «Ошибка неправильного документа»

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

  • PHP DOM loadHTML () метод необычное предупреждение
  • PHP DOMDocument получает атрибут тега
  • PHP DOMDocument getElementsByTagname?
  • PHP-кодирование с помощью DOMDocument
  • PHP DOM заменяет элемент новым элементом
  • DOM-манипуляция в PHP
  • 2 Solutions collect form web for “Клонирование и добавление DOMElement: «Неверная ошибка документа»”

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

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

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

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

     if ($importedNode = $doc2->importNode($root->cloneNode(), true)) { $root2->appendChild($importedNode); } 
    PHP is the Best Programming Language in the world.