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和DOMDocument检索元素_Php_Xpath_Domdocument - Fatal编程技术网

Php 使用xpath和DOMDocument检索元素

Php 使用xpath和DOMDocument检索元素,php,xpath,domdocument,Php,Xpath,Domdocument,我在下面的html代码中有一个广告列表。 我需要的是一个PHP循环来获取每个广告的以下元素: 广告URL(href属性的 我用下面的PHP代码获得了广告URL $d=newDOMDocument(); $d->loadHTML($ads);//变量$ads包含上面的HTML代码 $xpath=新的DOMXPath($d); $ls_ads=$xpath->query('//a'); foreach($ls_ads作为$ad){ $ad_url=$ad->getAttribute('href')

我在下面的html代码中有一个广告列表。 我需要的是一个PHP循环来获取每个广告的以下元素:

  • 广告URL(href属性的
    
    
    我用下面的PHP代码获得了广告URL

    $d=newDOMDocument();
    $d->loadHTML($ads);//变量$ads包含上面的HTML代码
    $xpath=新的DOMXPath($d);
    $ls_ads=$xpath->query('//a');
    foreach($ls_ads作为$ad){
    $ad_url=$ad->getAttribute('href');
    打印(“广告URL:$AD_URL”);
    }
    

    但是我没有设法获得另外两个元素(图像url和标题)。有什么想法吗?

    对于其他元素,您只需执行相同的操作:

    foreach ($ls_ads as $ad) {
        $ad_url = $ad->getAttribute('href');
        print("AD URL : $ad_url");
        $ad_Doc = new DOMDocument();
        $ad_Doc->documentElement->appendChild($ad_Doc->importNode($ad));
        $xpath = new DOMXPath($ad_Doc);
        $img_src = $xpath->query("//img[@src]");
        $title = $xpath->query("//div[@class='title']");
    }
    

    我设法用这个代码得到了我所需要的(基于Khue Vu的代码):

    $d=newDOMDocument();
    $d->loadHTML($ads);//变量$ads包含上面的HTML代码
    $xpath=新的DOMXPath($d);
    $ls_ads=$xpath->query('//a');
    foreach($ls_ads作为$ad){
    //获取广告url
    $ad_url=$ad->getAttribute('href');
    //将当前ad对象设置为新的DOMDocument对象,以便我们可以对其进行分析
    $ad_Doc=新的DOMDocument();
    $cloned=$ad->cloneNode(真);
    $ad_Doc->appendChild($ad_Doc->importNode($cloned,True));
    $xpath=new-DOMXPath($ad_-Doc);
    //获得广告标题
    $ad_title_tag=$xpath->query(//div[@class='title']);
    $ad_title=trim($ad_title_tag->item(0)->nodeValue);
    //获取广告图像
    $ad_image_tag=$xpath->query(“//img/@src”);
    $ad_image=$ad_image_标记->项(0)->节点值;
    }
    
    我尝试了此操作,但得到了一个错误=>可捕获的致命错误:传递给DOMPATH的参数1::\u construct()必须是DOMDocumentHi的实例,我更新了答案。DOMPATH需要使用DOMDocument对象初始化。感谢您的帮助,但我仍然收到一个错误=>致命错误:调用成员函数appendChild()在非对象上。我如何修复它?您好,抱歉,我没有真正测试代码。您是否可以尝试传入True参数,如:
    $ad\u Doc->importNode($ad,True)
    您可以引用,如果它仍然不正确