即使存在节点,XPath查询也会返回false

时间:2015-12-22 19:09:13

标签: php xpath utf-8

方案

我从使用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查询会返回匹配]

0 个答案:

没有答案