代码之家  ›  专栏  ›  技术社区  ›  Shafizadeh

为什么查询与DOM不匹配?

  •  1
  • Shafizadeh  · 技术社区  · 7 年前

    这是我的代码:

    $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

    预期结果是数组包含的class属性 li

    1 回复  |  直到 7 年前
        1
  •  1
  •   Community Jaime Torres    4 年前

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

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

    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);