Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php xpath不返回任何内容,可以';t理解:s_Php_Xpath - Fatal编程技术网

php xpath不返回任何内容,可以';t理解:s

php xpath不返回任何内容,可以';t理解:s,php,xpath,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_o

我正在做一些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>';
他不参与foreach循环,因为他在结果上没有“foreach”

结果应该是:

debug begin
    <meta charset="UTF-8">
debug end
调试开始
调试结束

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

foreach ($result_rows as $result_object) {
   echo $result_object->nodeValue;
}
好的,在编辑之后,我认为您需要将DomNodeList的每个成员发送到一个数组中,然后在该数组中循环。例如:

 $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>';
$query\u result=array()//设置一个空数组
foreach($result\u行作为$result\u对象){
//获取xpath查询的结果并发送到此数组
$query\u result[]=$result\u object->nodeValue;
}
回显“
调试开始”
; foreach($r查询结果){ 回音“每个foreach
”; echo$r; } 回显“
调试结束”

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,那么这就是你的问题。

谢谢你的提问,但他没有进入foreach,没有任何变化,我错了,它不是“echo$result_对象”;你说他没有进入foreach是什么意思?他没有返回foreach内部的“echo”测试
;“他至少会打印一次,所以他不进去,对吧?对不起,我不明白你在说什么。你能重述或编辑你的原始代码吗?结果是什么?嗯,嗯。。。设置变量时,您有
$result\u行
。但是您使用
$result\u对象
进行变量转储。。。这是两个不同的变量名。顺便说一句,删除
@
操作符前面的
@$doc->loadHTML($html)因此,如果加载文件时出现任何问题,将通知您。我想你会在那里找到你的答案。不能删除@,否则我会得到99999个错误lol,ye,应该是var_dump($result_rows);,这和我下面的答案是一样的。永远不要忽视错误。那就像把头埋在沙子里。告诉我们错误消息是什么。警告:DOMDocument::loadHTML():在C:\Program Files(x86)第37行\XAMPP\htdocs\lolwinrate\core\functions\general.php中分析实体中的属性名称时出错。警告:DOMDocument::loadHTML():在C:\Program Files(x86)中分析实体中的属性名称时出错,第1行\第37行的XAMPP\htdocs\lolwinrate\core\functions\general.php警告:DOMDocument::loadHTML():分析实体中的属性名称时出错,第37行的C:\Program Files(x86)中的第1行\XAMPP\htdocs\lolwinrate\core\functions\general.php删除了这些html代码。这段html代码是一个xml http请求,可能它没有html页面的格式……是这样吗?我在谷歌chrome上试了试,结果成功了……如果不是很关键,给我们网页的url,这样我们就可以看到HTML了。PHP手册:虽然格式错误的HTML应该能够成功加载,但当遇到错误标记时,此函数可能会生成E_警告错误。libxml的错误处理函数()可以用来处理这些错误。就像我说的这是一个xml http请求,我让我的php写在txt上,然后通过dropbox上传。现在我注意到,当我使用google chrome进行测试时,它拥有页面的完整html,不是我上传的这部分…所以xpath一定是错的?您的html文件没有
标记。。。它只是以
开头。。。这也可能是xpath返回空的原因。
if (!$doc->loadHTML($html)) {
    foreach (libxml_get_errors() as $error) {
        print_r($error);
    }
    libxml_clear_errors();
}