Bir site haritası dosyasının bir düğüm kaldırmak için DOM ve XPath kullanın

0 Cevap php

Benim site haritası dosyasından belirli URL düğümleri çıkaran bir fonksiyon geliştirmeye çalışıyorum. İşte ben bugüne kadar ne var.

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

"111111" çıktılar Hangi. Elemanları saymak $ '1 'ise ben bir foreach döngüsü içinde bir dize echo olamaz neden bilmiyorum.

Şimdiye kadar, ben yapıyorum

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

Benim site haritası çok büyük değildi eğer iyi işe yarayacağını. Bu kez şu anda dışarı, ben XPath sorguları kullanarak umuyorum daha hızlı olacaktır.

Gordon Yorumlarınız sonra, denedim:

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

Ve onun bir şey değil dönen.

Ben bir adım daha ileri giderek çalıştı ve bahsedilen diğer yazı kullanılmıştır kullanarak ne, CodePad kullanılır ve bu yaptım:

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

foreach döngü hattında ve ben ": DOMXPath :: query () Geçersiz ifade Warning" alıyorum. Urlset üzerindeki diğer Yorumlarınız için teşekkürler, benim kodunda çift eğik çizgi dahil emin olacak, bunu denedim ve hiçbir şey geri döndü.

0 Cevap