Use DOM y XPath para eliminar un nodo de un archivo de mapa del sitio

Estoy tratando de desarrollar una función que elimine ciertos nodos de URL de mi archivo de mapa del sitio. Esto es lo que tengo hasta ahora.

$xpath = new DOMXpath($DOMfile);
$elements = $xpath->query("/urlset/url/loc[contains(.,'$pageUrl')]");
echo count($elements);
foreach($elements as $element){
    //this is where I want to delete the URL
    echo $element;
    echo "here".$element->nodeValue;
}

Que produce "111111". No sé por qué no puedo hacer eco de una cadena en un bucle foreach si el recuento de $ elementos es '1'.

Hasta ahora, he estado haciendo

$urls = $dom->getElementsByTagName( "url" );
foreach( $urls as $url ){
    $locs = $url->getElementsByTagName( "loc" );
    $loc = $locs->item(0)->nodeValue;
    echo $loc;
    if($loc == $fullPageUrl){
                   $removeUrl = $dom->removeChild($url);                
    }
}

Lo que funcionaría bien si mi mapa del sitio no fuera tan grande. Se agota el tiempo ahora, así que espero que usar consultas xpath sea más rápido.

Después del comentario de Gordon, intenté:

$xpath = new DOMXpath($DOMfile);
$query = sprintf('/urlset/url[./loc = "%d"]', $pageUrl);
foreach($xpath->query($query) as $element) {
    //this is where I want to delete the URL
    echo $element;
    echo "here".$element->nodeValue;
}

Y no está devolviendo nada.

Intenté ir un paso más allá y usé el teclado, usando lo que se usó en la otra publicación mencionada, e hice esto:

<?php error_reporting(-1);
$xml = <<< XML <?xml version="1.0"
encoding="UTF-8" ?> <url>
<loc>professional_services</loc>
<loc>5professional_services</loc>
<loc>6professional_services</loc> 
</url> XML; 
$id = '5professional_services'; 
$dom = new DOMDocument; $dom->loadXML($xml);
$xpath = new DOMXPath($dom); $query = sprintf('/url/[loc = $id]');
foreach($xpath->query($query) as $record) {
     $record->parentNode->removeChild($record);
}
echo $dom->saveXml();

y recibo una "Advertencia: DOMXPath :: query (): Expresión no válida" en la línea de bucle foreach. Gracias por el otro comentario en el urlset, me aseguraré de incluir las barras diagonales dobles en mi código, lo probé y no devolvió nada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta