[英]Delete all elements of a certain type from an XML doc using PHP
我的任務應該很簡單:從XML文檔中刪除<places>
節點及其后代,剩下其他節點。
我嘗試了這段代碼,但是沒有用...
$document->preserveWhiteSpace = false;
$books = $xpath->query('piletilve_info/places');
//echo "4";
foreach ($books as $places) {
while($places->hasChildNodes()) {
$places->removeChild($places->childNodes->item(0));
}
$places->parentNode->removeChild($places);
}
要處理的源XML:
<piletilve_info>
<places>
<place>
...
</place>
</places>
<other node>
...
</other node>
</piletilve_info>
在實際數據中,有更多的節點沒有放置,但為簡單起見,此示例僅顯示了一些。
我看到了C#示例,但是我無法將代碼移植到PHP。
澄清 :在代碼段中,變量$books
只是查詢列表的持有人。 這個名字沒有意義。
目標是刪除整個節點而保留其他節點(實際上還有更多,但為簡單起見,此示例顯示了所有
$dom = new DOMDocument;
$dom->load('places.xml');
foreach ($dom->getElementsByTagName('places') as $places)
{
$places->parentNode->removeChild($places);
}
echo $dom->saveXml();
將刪除文檔中任何位置的所有<places>
元素,包括所有子元素。
輸出:
<?xml version="1.0"?>
<piletilve_info>
<other>
...
</other>
</piletilve_info>
當我使用接受的答案時,它不會刪除所有出現的標簽。 foreach循環可能會跳過標簽,可能是因為foreach依賴於內部數組指針,並且在循環內對其進行更改會導致意外行為。
我發現一個可行的解決方案如下所示。
$dom = new DOMDocument;
$dom->load('places.xml');
$placesNodes = $dom->getElementsByTagName('places')
while ($placesNodes->length > 0) {
$node = $placesNodes->item(0);
$node->parentNode->removeChild($node);
}
echo $dom->saveXml();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.