Решение, если я правильно понимаю вопрос, может заключаться в том, чтобы просто перезаписать значение $eventNames->item(0)->nodeValue
, не пытаясь удалить узел и добавить новый.
Например, используя ваш код и немного изменив его, чтобы он работал для этого более простого случая:
$str = <<<XML
<ScrapBook>
<Event>
<Name> Name of Event </Name>
<Blah>glop glop</Blah>
</Event>
</ScrapBook>
XML;
$xmlDoc = new DOMDocument();
$xmlDoc->loadXml($str);
$events = $xmlDoc->getElementsByTagName("Event");
foreach($events as $event){
$eventNames = $event->getElementsByTagName("Name");
$eventN = $eventNames->item(0)->nodeValue;
if(' Name of Event ' == $eventN){
$eventNames->item(0)->nodeValue = 'New name';
}
}
var_dump($xmlDoc->saveXML());
достанет мне:
string '<?xml version="1.0"?>
<ScrapBook>
<Event>
<Name>New name</Name>
<Blah>glop glop</Blah>
</Event>
</ScrapBook>
' (length=119)
И значение Name
для Event
было заменено на "New name
".