Php 根据条件从已解析的HTML文档中删除HTML元素
我使用简单的PHP HTML DOM解析器解析了一个HTML文档。在解析的文档中有一个ul标记,其中包含一些li标记。其中一个li标签包含一个我想删除的可怕的“添加此”按钮 更糟糕的是,列表项没有类或id,并且它在列表中并不总是处于同一位置。因此,没有简单的方法(如果我错了,请纠正我)用解析器删除它 我要做的是在所有li元素中搜索字符串'addthis.com',并删除包含该字符串的任何元素Php 根据条件从已解析的HTML文档中删除HTML元素,php,html,string,html-parsing,substring,Php,Html,String,Html Parsing,Substring,我使用简单的PHP HTML DOM解析器解析了一个HTML文档。在解析的文档中有一个ul标记,其中包含一些li标记。其中一个li标签包含一个我想删除的可怕的“添加此”按钮 更糟糕的是,列表项没有类或id,并且它在列表中并不总是处于同一位置。因此,没有简单的方法(如果我错了,请纠正我)用解析器删除它 我要做的是在所有li元素中搜索字符串'addthis.com',并删除包含该字符串的任何元素 <ul> <li>Foobar</li> <l
<ul>
<li>Foobar</li>
<li>addthis.com</li><!-- How do I remove this? -->
<li>Foobar</li>
</ul>
- 福巴
- addthis.com
- 福巴
仅供参考:这是purley在我学习PHP的过程中的一个爱好项目,而不是为了盈利而窃取内容的案例
欢迎所有建议 您可以做的是在解析之后使用jQuery。大概是这样的:
$('li').each(function(i) {
if($(this).html() == "addthis.com"){
$(this).remove();
}
});
找不到显式删除节点的方法,但可以通过将outertext设置为空来删除
$html = new simple_html_dom();
$html->load(file_get_contents("test.html"), false, false); // preserve formatting
foreach($html->find('ul li') as $element) {
if (count($element->find('a.addthis_button')) > 0) {
$element->outertext="";
}
}
echo $html;
此解决方案使用类和方法:
$str=“- Foobar
- 添加this.com
- Foobar
”;
$remove='addthis.com';
$doc=新的DOMDocument();
$doc->loadHTML($str);
$elements=$doc->getElementsByTagName('li');
$domElemsToRemove=array();
foreach($elements作为$element){
$pos=strpos($element->textContent,$remove);//或类似的$element->nodeValue
如果($pos!==false){
$domElemsToRemove[]=$element;
}
}
foreach($domElemsToRemove作为$domElement){
$DOMELENT->parentNode->removeChild($DOMELENT);
}
$str=$doc->saveHTML();//- Foobar
- Foobar
为什么不干脆$('li:contains(“addthis.com”)).remove()
?并非所有事情都有原因,但我同意您的解决方案是减少行数:)@Adam我想做的是在所有li元素中搜索字符串'addthis.com',并删除包含该字符串的任何元素。这就是问题所在…谢谢你的回复,但我打算将其传递给移动应用程序,因此我更愿意在服务器端执行此操作。谢谢你的回复!但我的示例代码似乎过于简化了。这里是一个(美化)的html粘贴。准备做后翻。已更新以使用完整的HTML。我通过测试class=addthis_按钮的存在来检测要删除的