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:
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.