1
我想開發一個功能,從我的站點地圖文件中刪除某些URL節點。這是我到目前爲止。使用DOM和XPath從站點地圖文件中刪除節點
$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 ::查詢() :無效表達式「在foreach循環行。感謝對urlset的其他評論,我將確保在我的代碼中包含雙斜線,嘗試它並且它不返回任何內容。
可能的重複[刪除PHP文件中的子節點與PHP](http://stackoverflow.com/questions/4667433/delete-child-node-in-xml-file-with -php) – Gordon 2011-01-20 21:43:09
`$ url`是DOMNodelist而不是`DOMElement`?該列表不能被刪除,也許你需要遍歷列表並刪除每個元素? – 2011-01-20 21:54:13