php xpath不返回任何内容,可以';t理解:s
我正在做一些xpath,但没有得到任何结果 我的代码: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
$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();
}