Я пытаюсь разработать функцию, которая удаляет определенные узлы URL из моего файла Sitemap. Вот что у меня есть.
$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". Я не знаю, почему я не могу отобразить строку в цикле foreach, если количество элементов $ равно 1.
До сих пор я занимался
$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);
}
}
Что бы хорошо работать, если бы моя карта сайта была не такой большой. Время истекло, поэтому я надеюсь, что использование запросов xpath будет быстрее.
После комментария Гордона я попытался:
$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;
}
И это ничего не возвращает.
Я попытался пойти дальше и использовал кодовую панель, используя то, что использовалось в другом упомянутом посте, и сделал это:
<?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();
и я получаю «Предупреждение: DOMXPath :: query (): Неверное выражение» в строке цикла foreach. Спасибо за другой комментарий к urlset, я обязательно включу двойную косую черту в мой код, попробовал и ничего не вернулось.