方案
我从使用PHP,DOMDOCUMENT和XPATH的网站获取内容。我的代码确保HTML内容为UTF-8并尝试删除与查询匹配的某些节点。
问题所在的部分代码
在PHP类中:
libxml_use_internal_errors(true);
$this->dom=new DOMDocument("4.01", "utf-8");
$xpath=new DOMXPath($this->dom);
$this->motorConfig['xPath_N']="//div[@class='pdfprnt-bottom-right']/following-sibling::*";
$content_text_dirty='
... aleba</p><div class="pdfprnt-bottom-right">Y entonces...</div><div><p> ...
';
if($this->motorConfig['xPath_N']){
$content_text_dirty=str_replace("\0", '', $content_text_dirty); //Avoid PHP BUG http://stackoverflow.com/questions/30925533/php-dom-loadhtml-method-unusual-warning
$this->dom->loadHTML(mb_convert_encoding($content_text_dirty, 'HTML-ENTITIES', "UTF-8"), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath=new DOMXPath($this->dom); //her cuz must be set after loading HTML into DOM
$nodes_to_remove=$xpath->query($this->motorConfig['xPath_N']);
var_dump($nodes_to_remove); --> bool(false)
...
问题:
有什么好方法可以知道为什么xpath查询没有找到结果?
额外备注
作为好奇心,当我删除部分时,PHP没有显示任何查询结果:
str_replace("\0", '', $content_text_dirty);
我已经使用这个PHP类很长一段时间,从不同的网站上抓取数据。但这只会在某些特定网站上发生。目前的案例涉及this site。 [实际上,使用FirePath尝试相同的xpath查询会返回匹配]