简单的HTML Dom:如何删除元素?
我想使用简单的HTML DOM删除文章中的所有图像,所以我可以轻松地创build一个新闻股票的文本的小片段,但我还没有想出如何删除它的元素。
基本上我会这样做
- 获取HTMLstring的内容
- 从内容中删除所有图像标签
- 将内容限制为x个单词
- 输出。
任何帮助?
没有专门的方法去除元素。 你只要find所有的img元素,然后做
$e->outertext = '';
当您只删除外部文本时,您将删除HTML内容本身,但是如果您对相同的元素执行另一个查找,它将显示在结果中。 原因在于简单的HTML DOM对象仍然有它的元素的内部结构,只是没有它的实际内容。 为了真正删除元素,你需要做的只是将HTML作为string重新加载到同一个variables中。 通过这种方式,对象将被重新创build而没有被删除的内容,并且简单的HTML DOM对象将被构build而没有它。
这里是一个示例函数:
public function removeNode($selector) { foreach ($this->find($selector) as $node) { $node->outertext = ''; } $this->load($this->save()); }
把这个函数放在simple_html_dom类中,你很好。
我觉得你有一些困难,因为你忘了保存(将内部DOM树转储回string)。
尝试这个:
$html = file_get_html("http://example.com"); foreach($html ->find('img') as $item) { $item->outertext = ''; } $html->save(); echo $html;
我不知道在哪里把这个function,所以我只是直接在我的代码中:
$html->load($html->save());
它基本上将for循环中所做的更改locking到上面的html中。
假设的解决scheme相当昂贵,实际上在大循环或其他types的重复中无法使用。
我更喜欢使用“软删除”:
foreach($html->find('somecondition'),$item){ if (somecheck) $item->setAttribute('softDelete', true); //<= set marker to check in further code $item->outertext=''; foreach($foo as $bar){ if(!baz->getAttribute('softDelete'){ //do something } } }
这对我有用:
foreach($html->find('element') as $element){ $element = NULL; }