1
我有一個包含大量標籤的XML文件。它在這裏和那裏有超過2000個標籤。我想刪除所有htmlText標記並將其保存爲新的XML。如何在PHP中做到這一點? 這裏是使用PHP XML節點刪除
$remove = $doc->getElementsByTagName('htmlText');
$doc->removeChild($remove);
我有一個包含大量標籤的XML文件。它在這裏和那裏有超過2000個標籤。我想刪除所有htmlText標記並將其保存爲新的XML。如何在PHP中做到這一點? 這裏是使用PHP XML節點刪除
$remove = $doc->getElementsByTagName('htmlText');
$doc->removeChild($remove);
這兩個解決方案應該工作的代碼THT IAM:
$elements = $doc->getElementsByTagName('htmlText');
while ($elements->length > 0) {
$elements->item(0)->parentNode->removeChild($elements->item(0));
}
或環向後
$elements = $doc->getElementsByTagName('htmlText');
for ($i = $elements->length-1; $i >= 0; $i--) {
$elements->item($i)->parentNode->removeChild($elements->item($i));
}
使用的foreach如先前所建議的,或者從0循環起來,將不起作用,因爲循環時節點列表會被改變。可以用下面的代碼段測試:
$doc = new DOMDocument();
$doc->loadHTML('<p>first</p><p>second</p><p>third</p>');
foreach ($doc->getElementsByTagName('p') as $el) {
$el->parentNode->removeChild($el);
}
echo $doc->saveHTML();
在這裏,節點列表包含3個元素:0 =>第一,1 =>秒,2 =>第三。如果你運行它,你會看到第二個元素沒有被刪除,因爲第一次迭代刪除了索引爲0('first')的元素,只剩下2個元素(0 => second,1 => third)的節點列表。下一次迭代將刪除索引爲1(第三個)的元素,並結束循環。如果你保存文檔,你會發現第二個元素保持不變。當你說「它只會刪除其中的一部分」到以前的建議時,你可能會遇到這種情況。
輝煌,像魅力一樣工作。 – 2011-02-19 01:10:41