Verwenden Sie DOM-und XPath-zum entfernen von Knoten aus einer XML-sitemap-Datei

Ich versuche mich zu entwickeln, eine Funktion, die entfernt bestimmte URL-Knoten aus meiner XML-sitemap-Datei. Hier ist was ich habe, so weit.

$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;
}

Welche Ausgänge "111111". Ich weiß nicht, warum ich kann nicht echo einen string in einer foreach-Schleife, wenn $Elemente zählen ist '1'.

Bis jetzt, ich habe zu tun

$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);                
    }
}

Welche würde funktionieren, wenn meine sitemap noch nicht so groß war. Es mal aus, gerade jetzt, so hoffe ich, dass ich mit xpath-Abfragen werden schneller.

Nach Gordon ' s Kommentar habe ich versucht:

$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;
}

Und seine Rückkehr nicht alles.

Versuchte ich noch einen Schritt weiter und verwendet codepad, die mit dem, was verwendet wurde, in dem anderen post erwähnt, und Tat dies:

<?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();

und ich bin immer ein "Warning: DOMXPath::query(): Ungültiger Ausdruck" auf die foreach-Schleife Linie. Danke für die anderen Kommentar über die urlset, ich werde sicher sein, um die Doppel-slashes in meinem code, habe es ausprobiert und wieder nichts.

mögliche Duplikate von löschen von child-Knoten in der xml-Datei mit php
$url ist ein DOMNodelist kein DOMElement? Und die Liste kann nicht entfernt werden, vielleicht musst du die Liste Durchlaufen und entfernen Sie jedes element?
Ich verstehe nicht, jakenoble. Denken Sie, dass der code, den ich vorher hatte, lief durch die XML-und im Vergleich alle loc-Knoten, um die php-variable war der richtige Weg zu gehen? Vielleicht habe ich fehlerhaften code in der Art ist es jetzt?
der Grund, warum ich wies Sie an, die andere Frage ist, weil es zeigt, wie Sie tatsächlich entfernen Sie die Knoten. Dieser Teil fehlt in deinem Beispiel. Es war nicht gemeint zu empfehlen, ändern Sie Ihre XPath. Wir können nicht sagen, wenn Ihr XPath korrekt ist, ohne zu sehen, Ihre XML.
Ich bin damit einverstanden. Konzeptionell ist es eine doppelte disriggarding die namespace-Problem.

InformationsquelleAutor ctrygstad | 2011-01-20

Schreibe einen Kommentar