我有以下字符串
$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
答案 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()
。