If you want to add html block into your DOM tree you should use the appendChild and not the nodeValue method.
The problem is that you need first to create a DON Node.
Here is a trick on how to do this:
// This will be the original doc we work on.
$doc1 = new DOMDocument();
$doc1->loadHTML("<html><body><p></p></body></html>");
$element = $doc1->getElementsByTagName('p')[0];
// Here is the trick - we create a new document
$doc2 = new DOMDocument();
$s = '<li>Person <b>{{ $name }}</b> is <span>{{ $age }}</span> years old. <a href="" data-id="{{ $id }}" data-event="Event: \'onclick\', Action: \'deleteThePerson\'">X</a></li>';
// and load the html we need into that document
$doc2->loadHTML($s);
// Now we can append the node from `doc2` into `doc1`
$element->appendChild($doc1->importNode($doc2->getElementsByTagName('li')[0], true));
echo $doc1->saveHTML();
The important thing that you need to remember is that you must use the importNode method in order to move that node from doc2 into doc1. Only after you imported that node - you can use the appendChild function.
The output in the above example will be:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p><li>Person <b>{{ $name }}</b> is <span>{{ $age }}</span> years old. <a href="" data-id="{{ $id }}" data-event="Event: 'onclick', Action: 'deleteThePerson'">X</a></li></p></body></html>