我想使用Simple HTML DOM来移除文章中的所有图片,以便轻松创建新闻滚动条的小段落,但我还没弄清如何使用它来删除元素。
基本上,我需要:
- 获取HTML字符串作为内容。
- 从内容中删除所有图像标签。
- 将内容限制为x个单词。
- 输出结果。
有什么帮助吗?
我想使用Simple HTML DOM来移除文章中的所有图片,以便轻松创建新闻滚动条的小段落,但我还没弄清如何使用它来删除元素。
基本上,我需要:
有什么帮助吗?
没有专门删除元素的方法。您只需找到所有的img元素,然后执行以下操作:
$e->outertext = '';
如果您只删除外部文本,则会删除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 类里就可以了。
我认为你遇到了一些困难,因为你忘记保存(将内部DOM树转换回字符串)。
尝试这个:
$html = file_get_html("http://example.com");
foreach($html ->find('img') as $item) {
$item->outertext = '';
}
$html->save();
echo $html;
我不知道该把这个函数放在哪里,所以我直接把以下内容放在了我的代码中:
$html->load($html->save());
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;
}
$html->save();
- Salem<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
试试这个:
$dom = new Dom();
$dom->loadStr($text);
foreach ($dom->find('element') as $element) {
$element->delete();
}
以下我使用FIND()函数的两种不同方法,删除传入URL的HEADER和所有SCRIPT节点。删除第二个参数以返回所有匹配节点的数组,然后只需循环遍历这些节点。
$clean_html = file_get_html($url);
// Find and remove 1st instance of node.
$node = $clean_html->find('header', 0);
$node->remove();
// Find and remove all instances of Nde.
$nodes = $clean_html->find('script');
foreach($nodes as $node) {
$node->remove();
}
$html->find('img')
的结果上使用foreach
并删除 outerText。然后你执行echo $html;
,应该会得到减去 img 元素的 HTML。 - Gordon