2013-10-17 50 views
2

從HTML字符串刪除特定ID的DIV我有以下字符串使用的DOMDocument

$string = '<div id="promo_MLTEST"><h1>Test Promo Add</h1><p>This should add a new promo</p><ul><li>Test List1</li><li>Test List2</li></ul></div>test product 1' 

我想使用的DOMDocument與ID promo_MLTEST刪除div和剛剛離開

test product 1 

我試過以下

$doc = new DOMDocument(); 
$doc->loadHTML($string); 
$elements = $doc->getElementById('promo_MLTEST'); 
while($span = $elements->item(0)) {  
    $span->parentNode->removeChild($span); 
} 
echo $doc->saveHTML(); 

但我得到以下錯誤

Fatal error: Call to a member function item() on a non-object in... 

引用這是

while($span = $elements->item(0)) { 

誰能幫助,請行?

編輯

我也曾嘗試

$divMeta = $doc->getElementById('promo_MLTEST'); 
$divMeta->parentNode->removeChild($divMeta); 
echo $sContent = $divMeta->saveHTML(); 

這給

Fatal error: Call to a member function removeChild() on a non-object in 

回答

2

較新版本的PHP/libxml的都可以使用getElementById()與您的代碼(如PHP 5.4.20 &的libxml 2.8.0它按需要工作)。然而,在較低的版本(我不確定是否切入點是,無論它是否與libxml中的操作系統相關),事實並非如此。此變通辦法正常工作對我來說:增加一個DTD到你的HTML:

$doc->loadHTML('<!DOCTYPE html><html><body>'.$string.'</body></html>'); 

see also the problem observed at codepad

...但它可能會很版本有關。如果它仍然不能用於DTD,請嘗試$doc->validate()

+0

非常好 - 這真的很有用,我有一個非常舊的Linux機器,我根本無法更新,所以在閱讀你的答案後,我認爲這幾乎是肯定的。另外,感謝鍵盤示例 - 看了你的代碼後,花了我兩分鐘的時間來解決這個問題:-) – l0ckm4