我在从远程页面检索的html中删除某些<tr>
时面临问题,主要是
问题是html无效或损坏我的代码在测试有效的井
时效果很好格式化的html但是当涉及到远程页面的代码时,它在某些
之后不起作用实验如果发现我是因为远程页面的html代码无效
这是我的代码:
<?php
//Get the url
$url = "http://lsh.streamhunter.eu/static/section0.html";
$html = file_get_contents($url);
$doc = new DOMDocument(); // create DOMDocument
@$doc->loadHTML($html); // load HTML you can add $html
$xpath = new DOMXpath($doc);
$elements = $xpath->query("//td[contains(., 'desktop')]"); // search td's that contain 'desktop'
foreach($elements as $el){
$parent = $el->parentNode;
$parent->parentNode->removeChild($parent); // remove TR
//$parent->removeChild($el); // remove TD
}
echo $doc->saveHTML(); // save new HTML
?>
它总是给我500个内部服务器错误, 虽然当我在格式良好的HTML上测试它时效果很好吗?
上面的代码中有什么我遗漏的东西吗? 有什么建议可以解决这个问题吗?
答案 0 :(得分:0)
问题在于当你删除TR时,下一个TD将是孤儿,你可能会收到该错误,因为parentNode
属性引用了一个不存在的节点。
请改为:
$toRemove = array();
// gather a list of TRs to remove
foreach($elements as $el)
if(!in_array($el->parentNode, $toRemove, true))
$toRemove[] = $el->parentNode;
// remove them
foreach($toRemove as $tr)
$tr->parentNode->removeChild($tr);
此外,要禁止验证警告,请添加:
libxml_use_internal_errors(true);
在加载HTML之前(并删除@
运算符)。