2

我有以下字符串

$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
4

1 回答 1

2

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

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

另请参阅在键盘上观察到的问题

...但它可能与版本非常相关。$doc->validate()如果它仍然不能与 DTD 一起使用,请尝试。

于 2013-10-17T16:32:25.017 回答