Я пытаюсь разработать функцию, которая удаляет определенные узлы URL из моего файла Sitemap. Вот что я до сих пор.Используйте DOM и XPath для удаления узла из файла 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, если число $ elements равно '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;
}
И его не возвращающегося ничего.
Я попытался сделать еще один шаг и использовать codepad, используя то, что было использовано в другом посте упоминалось, и сделал это:
<?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 :: запрос() : Недопустимое выражение "в строке цикла foreach. Спасибо за другой комментарий по urlset, я обязательно включу двойные косые черты в моем коде, попробовал бы это и ничего не вернул.
Возможный дубликат [удалить дочерний узел в файле xml с php] (http://stackoverflow.com/questions/4667433/delete-child-node-in-xml-file-with -php) – Gordon
'$ url' является' DOMNodelist' не 'DOMElement'? И список не может быть удален, возможно, вам нужно перебрать список и удалить каждый элемент? –
Не понимаю jakenoble. Считаете ли вы, что код, который у меня был до этого, прошел через XML и сравнил все узлы loc с переменной php, был правильным путем? Может, у меня есть ошибочный код так, как сейчас? – ctrygstad