Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据条件从已解析的HTML文档中删除HTML元素_Php_Html_String_Html Parsing_Substring - Fatal编程技术网

Php 根据条件从已解析的HTML文档中删除HTML元素

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

我使用简单的PHP HTML DOM解析器解析了一个HTML文档。在解析的文档中有一个ul标记,其中包含一些li标记。其中一个li标签包含一个我想删除的可怕的“添加此”按钮

更糟糕的是,列表项没有类或id,并且它在列表中并不总是处于同一位置。因此,没有简单的方法(如果我错了,请纠正我)用解析器删除它

我要做的是在所有li元素中搜索字符串'addthis.com',并删除包含该字符串的任何元素

<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_按钮的存在来检测要删除的
  • 标记。效果很好!如果我有代表做这件事,我会+1。任何人都可以自由+1这个!