Uncaught exception 'DOMException' with message 'Hierarchy Request Error' Uncaught exception 'DOMException' with message 'Hierarchy Request Error' php php

Uncaught exception 'DOMException' with message 'Hierarchy Request Error'


The error Hierarchy Request Error with DOMDocument in PHP means that you are trying to move a node into itself. Compare this with the snake in the following picture:

Snake eats itself

Similar this is with your node. You move the node into itself. That means, the moment you want to replace the person with the paragraph, the person is already a children of the paragraph.

The appendChild() method effectively already moves the person out of the DOM tree, it is not part any longer:

$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>

Eva is already gone. Its parentNode is the paragraph already.

So Instead you first want to replace and then append the child:

$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>

Now everything is fine.