PHP&;xPath问题

PHP&;xPath问题,php,xpath,Php,Xpath,我正在使用PHP和xPath爬网到我自己的网站(只是爬网html而不是进入服务器),但我遇到了以下错误: 可捕获的致命错误:类的对象 无法将DOMNodeList转换为 上的C:\wamp\www\crawler.php中的字符串 第46行 我已经试着回显那句话,看看我得到了什么,但我也会得到同样的错误,我也试着用谷歌搜索错误,但我,最终,在php文档中,我发现我的示例与php文档中的示例完全相同,只是我使用的是HTML而不是XML…所以我不知道出了什么问题…这是我的代码 <?php $h

我正在使用PHP和xPath爬网到我自己的网站(只是爬网html而不是进入服务器),但我遇到了以下错误:

可捕获的致命错误:类的对象 无法将DOMNodeList转换为 上的C:\wamp\www\crawler.php中的字符串 第46行

我已经试着回显那句话,看看我得到了什么,但我也会得到同样的错误,我也试着用谷歌搜索错误,但我,最终,在php文档中,我发现我的示例与php文档中的示例完全相同,只是我使用的是HTML而不是XML…所以我不知道出了什么问题…这是我的代码

<?php
$html = file_get_contents('http://miurl.com/mipagina#0');
// create document object model
$dom = new DOMDocument();
// load html into document object model
@$dom->loadHTML($html);
// create domxpath instance
$xPath = new DOMXPath($dom);
// get all elements with a particular id and then loop through and print the href attribute
$elements = $xPath->query("//*[@class='nombrecomplejo']");
if ($elements != null) {
    foreach ($elements as $e) {
      echo parse_str($e);
    } 
}                                                   
?>
只是一个猜测,但与$elements相呼应;是46号线吗?我相信echo命令需要字符串或可转换为字符串的内容,而$elements不是。尝试删除该行。

根据,不需要“
$elements!=null
”检查
DOMXPath::query()
将始终返回一个
DOMNodeList
,尽管它的长度可能为零,这不会混淆
foreach
循环

另外,请注意使用
nodeValue
属性来获取元素的文本表示:

$elements = $xPath->query("//*[@class='nombrecomplejo']");

foreach ($elements as $e) {
  echo $e->nodeValue;
}

出现错误的原因是,除了字符串之外,您无法向输入任何内容,您尝试传入
doElement

此处没有特定的答案,只有调试提示

首先,从中删除@

@$dom->loadHTML($html);
这里可能有一个警告,可以帮助您调试问题。loadHTML方法不能总是处理格式不良的HTML。在您发布的示例中,我得到了以下信息

PHP Warning:  DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 109 in /Users/alanstorm/Desktop/foo.php on line 7
如果您有能力这样做,请安装扩展并使用它来获取干净的文档

另外,请确保$html中实际上有一个字符串。由于您正在通过http请求一个页面,可能是由于某种原因您的IP被阻止了

如果您不习惯处理完全“硬核”的面向对象接口,那么使用DOMDocument类/对象家族可能会很棘手

你需要记住的两件事是

  • DomDocument方法返回的几乎所有内容都是对象

  • 这些对象中的大多数无法转换为字符串

  • 因此,当您尝试将DOMNodeList转换为字符串时,代码似乎出错了,这意味着出于某种原因,$e是节点列表而不是节点

    尝试回显$e->length,查看是否有特定长度的节点列表,或者迭代$e以找出其中的内容。您还可以添加一个回显“.”;返回到循环中,然后计算点数,以确保Xpath查询返回的长度不为零

    我猜您的xpath查询在这里返回一个空节点列表。下载并使用它在HTML文档上运行xpath查询。这将使您确信自己拥有正确的xPath,然后您可以集中精力找出PHP部分。当我使用您的示例页面/代码进行检查时,得到的结果为空

    祝你好运