使用domdocument从html字符串中删除具有特定id的div

时间:2013-10-17 16:06:53

标签: php 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

1 个答案:

答案 0 :(得分:2)

较新版本的php / libxml可以将getElementById()与您的代码一起使用(例如PHP 5.4.20&amp; libxml 2.8.0,它可以根据需要使用)。但是,在较低的版本上(我不确定是什么点,是否与libxml中的操作系统相关),它不是。这个解决方法对我来说很好:在你的html中添加一个DTD:

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

see also the problem observed at codepad

...但它可能与版本有关。如果仍然无法使用DTD,请尝试使用$doc->validate()