Я заметил, что при попытке вызвать метод insertBefore в DOMNode, где вставляемый узел взят из другого документа (т. Е. Отличается от ссылочного узла и , вставляемого в него), PHPво время выполнения генерируется исключение DOMException, в котором появляется сообщение «Ошибка не допускается модификацией».
Документация, по-видимому, разбросана по этой проблеме, хотя я видел упоминание о том, что в нее вставляется узел только для чтения .
Обходное решение, которое я нашел, - это клонирование узла из другого документа и вставка клона.Пример:
foreach($nodeChildren as $child) {
$clone = $child->cloneNode(true);
$parentNode->insertBefore($clone, $nodeToInsertInFrontOf);
}
У меня двоякий вопрос:
1) Почему я должен клонировать этот узел, чтобы выполнить вставку?
2) Этонаиболее эффективный способ выполнения этого действия (при условии, что клонированный дочерний узел может содержать несколько дочерних элементов и несколько уровней иерархии внуков)?