Objekt-Daten mit verschachtelter XML-Struktur ersetzen

Auslesen verschachtelter Objekt-Daten (am Beispiel von wd:entry), und Zurückschreiben der Daten
require_once $_SERVER['DOCUMENT_ROOT'] . '/weblication/grid.php';

$path = '/de/index.php';
$dom = new DOMDocument();
$dom->load( $_SERVER['DOCUMENT_ROOT'] . $path );
$xpath = new DOMXPath( $dom );

$existingNodes = [];
$newNodes = [ '/de/start.php', '/de/neu.php' ];

$classesQuery = '/wd:document/wd:extension/wd:object/wd:data[@id="classes"]';

$classesNodeList = $xpath->query( $classesQuery );

if( $classesNodeList->length === 1 ) {
    $classesNode = $classesNodeList->item( 0 );

    $entryNodeList = $xpath->query( 'wd:entry', $classesNode );
    if( $entryNodeList->length > 0 ) {
        foreach( $entryNodeList as $entryNode ) {
            $existingNodes[] = $entryNode->getAttribute( 'url' );
        }
    }

    $classesNode->nodeValue = '';
    $setNodes = !empty( $newNodes ) ? array_unique( array_merge( $existingNodes, $newNodes ) ) : [];

    if( !empty( $setNodes ) ) {
        foreach( $setNodes as $setNode ) {

            $node = $dom->createElement( 'wd:entry' );
            $node->setAttribute( 'url', $setNode );
            $classesNode->appendChild( $node );

        }
    }

    $content = $dom->saveXML();
    $content = wStringconverter::removePrologXml( $content );

    file_put_contents( $_SERVER['DOCUMENT_ROOT'] . $path, $content );

}