php xpath什么都不返回,无法理解:s

时间:2013-11-20 17:29:02

标签: php xpath

我正在做一些xpath,我无法得到任何结果,

我的代码:

    $html = file_get_contents($url);
    $doc = new DOMDocument;
    @$doc->loadHTML($html);
    $xpath = new DOMXpath($doc);

    $qq = ('/html/head');
    $result_rows = $xpath->query($qq);

    var_dump ($result_object);

    echo '<br>debug begin<br>';
    foreach ($result_rows as $result_object)
    {
        echo 'for each foreach<br>';
        echo $result_object->nodeValue;
    }
    echo '<br>debug end<br>';

结果:

object(DOMNodeList)#3 (1) { ["length"]=> int(0) } 
debug begin

debug end

他没有介入foreach循环,因为他的结果是没有“为每个foreach”

结果应该是:

debug begin
    <meta charset="UTF-8">
debug end

2 个答案:

答案 0 :(得分:0)

尝试回显您要返回的结果对象的nodeValue属性,例如:

foreach ($result_rows as $result_object) {
   echo $result_object->nodeValue;
}

好的,在编辑之后,我认为您需要将DomNodeList的每个成员发送到一个数组中,然后循环遍历该数组。 E.g:

 $query_result = array();  //Set up an empty array
 foreach($result_rows as $result_object){ 
    //take results of xpath query and send to this array
    $query_result[] = $result_object-> nodeValue;
  }

 echo '<br>debug begin<br>';
 foreach ($query_result as $r){
    echo 'for each foreach<br>';
    echo $r;
  }
  echo '<br>debug end<br>';

答案 1 :(得分:0)

1。删除@前面的@$doc->loadHTML($html); 2。修复99999错误(根据您的评论)。 (阅读错误信息!告诉我们它们是什么。)
3。只有这样$html才能真正保存html数据,然后才能将其读入XML / DOM文档。

现在你无法获得HTML。您正在读取XML / DOM文档中的空字符串。而这又是为什么你的XPATH返回空的原因......因为整个HTML都没有。

修改
有关您的网站未加载到XML / DOM的更多信息,请将@$doc->loadHTML($html);更改为:

if (!$doc->loadHTML($html)) {
    foreach (libxml_get_errors() as $error) {
        print_r($error);
    }
    libxml_clear_errors();
}

无论如何,它期待HTML。所以如果你已经知道它不是HTML,那就有你的问题了。