简单的HTML Dom:如何删除元素?

时间:2011-11-22 13:20:51

标签: php dom simple-html-dom

我想使用Simple HTML DOM删除文章中的所有图片,这样我就可以轻松地为新闻自动收录器创建一小段文本,但我还没想出如何用它删除元素。

基本上我会做

  1. 以HTML字符串形式获取内容
  2. 从内容中删除所有图片代码
  3. 将内容限制为x字
  4. 输出
  5. 任何帮助?

8 个答案:

答案 0 :(得分:49)

没有专门的方法来删除元素。你只需找到所有的img元素然后再做

$e->outertext = '';

答案 1 :(得分:28)

当您只删除外部文本时,您删除了HTML内容本身,但如果您对相同的元素执行另一次查找,它将显示在结果中。原因是简单的HTML DOM对象仍然具有元素的内部结构,只是没有它的实际内容。为了真正删除元素,您需要做的只是将HTML作为字符串重新加载到同一个变量中。这样,将在没有删除内容的情况下重新创建对象,并且将在没有它的情况下构建简单的HTML DOM对象。

这是一个示例函数:

public function removeNode($selector)
{
    foreach ($this->find($selector) as $node)
    {
        $node->outertext = '';
    }

    $this->load($this->save());        
}

将此函数放在simple_html_dom类中,你很好。

答案 2 :(得分:11)

我认为你有一些困难,因为你忘了保存(将内部DOM树转储回字符串)。

试试这个:

$html = file_get_html("http://example.com");

foreach($html ->find('img') as $item) {
    $item->outertext = '';
    }

$html->save();

echo $html;

答案 3 :(得分:4)

我无法弄清楚将函数放在何处,所以我只是将以下内容直接放在我的代码中:

$html->load($html->save());

它基本上将for循环中所做的更改锁定回上面的html。

答案 4 :(得分:2)

假设的解决方案非常昂贵,并且在大循环或其他类型的重复中几乎无法使用。

我更喜欢使用"软删除":

library(dplyr)
result <- sampledput %>% group_by(V2, V3) %>% summarise(V1 = V1[length(V1)])

答案 5 :(得分:1)

这对我有用:

foreach($html->find('element') as $element){
   $element = NULL;
}

答案 6 :(得分:0)

removeNode起添加新答案绝对是删除该答案的更好方法:

$html->removeNode('img');

标记接受的答案时,此方法可能不可用。您无需循环html来查找每个HTML,这将删除它们。

答案 7 :(得分:0)

使用outerhtml代替outertext

<div id='your_div'>the contents of your div</div>

$your_div->outertext = '';
echo $your_div // echoes <div id='your_div'></div>

$your_div->outerhtml= '';
echo $your_div // echoes nothing