为什么查询与DOM不匹配?

时间:2017-07-01 11:25:04

标签: php dom html-parsing

这是我的代码:

$res = file_get_contents("http://www.lenzor.com/photo/search/index/type/user/%D8%B9%D9%84%DB%8C//text/%D9%81%D8%A7%D8%B7%D9%85%D9%87");

$doc = new \DOMDocument();
@$doc->loadHTMLFile($res);
$xpath = new \DOMXpath($doc);
$links = $xpath->query("//ul[@class='user_box']/li");
$result = array();
if (!is_null($links)) {
    foreach ($links as $link) {
        $href = $link->getAttribute('class');
        $result[] = [$href];
    }
}

print_r($result);

Here是我正在处理的内容。我的意思是它是echo $res的结果。

好的,我的代码结果是一个空数组。因此$links为空,foreach将不会执行。为什么?为什么//ul[@class='user_box']/li查询与DOM不匹配?

预期结果是一个数组包含li s。的类属性。

1 个答案:

答案 0 :(得分:1)

试试这个,希望这会有所帮助。您的代码中几乎没有错误。

  

1。您应该像这样'//ul[@class="user_box clearfix"]/li'进行搜索,因为该HTML源的class="user_box clearfix"类属性包含两个类。

     

2。您应该使用loadHTML代替loadHTMLFile

<?php
ini_set('display_errors', 1);

libxml_use_internal_errors(true);
$res = file_get_contents("http://www.lenzor.com/photo/search/index/type/user/%D8%B9%D9%84%DB%8C//text/%D9%81%D8%A7%D8%B7%D9%85%D9%87");

$doc = new \DOMDocument();
$doc->loadHTML($res);
$xpath = new \DOMXpath($doc);
$links = $xpath->query('//ul[@class="user_box clearfix"]/li');
$result = array();
if (!is_null($links)) {
    foreach ($links as $link) {
        $href = $link->getAttribute('class');
        $result[] = [$href];
    }
}

print_r($result);