Я получаю ошибку при замене или добавлении дочернего элемента в узел.
Требуется:
Я хочу изменить это на ..
<?xml version="1.0"?> <contacts> <person>Adam</person> <person>Eva</person> <person>John</person> <person>Thomas</person> </contacts>
как это
<?xml version="1.0"?> <contacts> <person>Adam</person> <p> <person>Eva</person> </p> <person>John</person> <person>Thomas</person> </contacts>
ошибка
Неустранимая ошибка: исключить исключение «DOMException» с сообщением «Ошибка запроса иерархии»
мой код
function changeTagName($changeble) { for ($index = 0; $index < count($changeble); $index++) { $new = $xmlDoc->createElement("p"); $new ->setAttribute("channel", "wp.com"); $new ->appendChild($changeble[$index]); $old = $changeble[$index]; $result = $old->parentNode->replaceChild($new , $old); } }
Ошибка запроса иерархии ошибок с помощью DOMDocument в PHP означает, что вы пытаетесь переместить узел в себя. Сравните это со змеей на следующем рисунке:
Подобно этому с вашим узлом. Вы перемещаете узел в себя. Это означает, что в тот момент, когда вы хотите заменить человека абзацем, этот человек уже является детьми этого абзаца.
Метод appendChild () эффективно уже перемещает человека из дерева DOM, он больше не является частью:
$para = $doc->createElement("p"); $para->setAttribute('attr', 'value'); $para->appendChild($person); <?xml version="1.0"?> <contacts> <person>Adam</person> <person>John</person> <person>Thomas</person> </contacts>
Ева уже ушла. Его parentNode уже является абзацем.
Итак, вместо этого вы сначала хотите заменить, а затем добавить дочерний элемент:
$para = $doc->createElement("p"); $para->setAttribute('attr', 'value'); $person = $person->parentNode->replaceChild($para, $person); $para->appendChild($person); <?xml version="1.0"?> <contacts> <person>Adam</person> <p attr="value"><person>Eva</person></p> <person>John</person> <person>Thomas</person> </contacts>
Теперь все в порядке.