简单的 HTML DOM 解析器 - 删除元素不起作用

Posted

技术标签:

【中文标题】简单的 HTML DOM 解析器 - 删除元素不起作用【英文标题】:Simple HTML DOM Parser - removing element not working 【发布时间】:2021-10-16 04:46:14 【问题描述】:

我有以下 html 代码:

<div id="hero_techSpec">
    <div class="hero_techSpecItem">
        blubb
    </div>
</div>

现在,我正在尝试使用“简单的 HTML DOM 解析器”删除内部 div 元素。

$document = HtmlDomParser::str_get_html("...some HTML code as string...");
$techSpec = $document->find("#hero_techSpec", 0);
echo $techSpec;

$techSpec->find(".hero_techSpecItem", 0)->outertext = '';

echo $techSpec;
$document->load($document->save());
echo $document->find("#hero_techSpec", 0); die;

在所有三个“echo”中,内部 div 仍然存在。我尝试遵循相关解决方案:Simple HTML Dom: How to remove elements?

但是,它似乎不适用于我的情况。您对如何解决该问题有任何想法/提示吗?谢谢!

【问题讨论】:

再次阅读引用的问题。一个答案建议使用outerhtml 而不是outertext,另一个参考removeNode()。其他需要考虑的可能是使用 php 的原生 HTML 解析库。看起来它具有您需要的所有功能。 非常感谢您的快速回复。 outertext 和 outerhtml 都不起作用。结果是完全一样的。使用 removeNode() 我收到未定义函数的错误。 您使用的是最新版本吗?该库最后一次发布是在 2019 年,同年给出了removeNode() 的答案。 我用的是1.9.1,好像是最新版本。 simplehtmldom.sourceforge.io/manual_api.htm中没有列出函数“removeNode” 【参考方案1】:

试试这样的:

$document->load($htmlString);
$techSpec = $document->find(".//div[@class='hero_techSpecItem']")[0];
$techSpec->outertext  = "";
$document->load($document->save());
echo $document;

输出应该是:

<div id="hero_techSpec">      </div>

【讨论】:

以上是关于简单的 HTML DOM 解析器 - 删除元素不起作用的主要内容,如果未能解决你的问题,请参考以下文章

输入字段中的简单 HTML DOM 解析器

本地服务器上的 PHP 简单 HTML DOM 解析器

如何使用简单的 HTML Dom 获取图像元素旁边的文本?

laravel 5 的简单 html dom 解析器

简单的 HTML DOM 解析器 - 抓取没有 id 或类的 html 内容

笔记:XML-解析文档-DOM