我使用Simple PHP HTML DOM Parser解析了一个HTML文档。在解析的文档中有一个ul-tag,里面有一些li-tags。其中一个li-tag包含我想删除的那些可怕的“Add This”按钮之一。
更糟糕的是,列表项没有类或id,并且它并不总是在列表中的相同位置。所以没有简单的方法(纠正我,如果我错了)用解析器删除它。
我想要做的是在所有li元素中搜索字符串'addthis.com'并删除包含该字符串的任何元素。
<ul>
<li>Foobar</li>
<li>addthis.com</li><!-- How do I remove this? -->
<li>Foobar</li>
</ul>
仅供参考:在我学习PHP的过程中,这是一个业余爱好项目,而不是内容被盗以获取利润。
欢迎所有建议!
答案 0 :(得分:3)
无法找到明确删除节点的方法,但可以通过将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;
答案 1 :(得分:1)
你能做的就是在解析后使用jQuery。像这样:
$('li').each(function(i) {
if($(this).html() == "addthis.com"){
$(this).remove();
}
});
答案 2 :(得分:0)
此解决方案使用DOMDocument类和domnode.removechild方法:
$str="<ul><li>Foobar</li><li>addthis.com</li><li>Foobar</li></ul>";
$remove='addthis.com';
$doc = new DOMDocument();
$doc->loadHTML($str);
$elements = $doc->getElementsByTagName('li');
$domElemsToRemove = array();
foreach ($elements as $element) {
$pos = strpos($element->textContent, $remove); // or similar $element->nodeValue
if ($pos !== false) {
$domElemsToRemove[] = $element;
}
}
foreach( $domElemsToRemove as $domElement ){
$domElement->parentNode->removeChild($domElement);
}
$str = $doc->saveHTML(); // <ul><li>Foobar</li><li>Foobar</li></ul>