从xpath Dom解析返回所有结果?

时间:2016-06-11 18:27:44

标签: php dom xpath domdocument

我想用PHP抓一个网站, 这是代码:

<?php  
$url = 'http://sample.com';
$dom = new DOMDocument();
@$dom->loadHTMLFile($url);
$xpath = new DOMXpath($dom);
$contents = $xpath->query('//p[@class="ac"]');
$content = $dom->saveHTML($contents->item(0));
echo $content;
echo '<br />';
 ?>

但它只会返回第一个带有“ac”类的p标签,但是我希望它能返回所有结果。所以我编写了代码:

<?php  
$url = 'http://sample.com';
$dom = new DOMDocument();
@$dom->loadHTMLFile($url);
$xpath = new DOMXpath($dom);
$contents = $xpath->query('//p[@class="ac"]');
$content = $dom->saveHTML($contents->item(0));
for($i=0;$i<$contents->length; $i++){
    echo $contents->item($i);
}
echo '<br />';
 ?>

但是,它给了我这个错误:

  

捕获致命错误:类DOMElement的对象无法转换为

中的字符串

我做错了什么?

1 个答案:

答案 0 :(得分:1)

$ contents-&gt; item($ i)是DomElement对象。您可以打印$contents->item($i)->nodeValue以获取段落文本或以$content = $dom->saveHTML($contents->item($i))方式获取outerhtml。

但我更喜欢这样的循环

$xpath = new DOMXpath($dom);
foreach($xpath->query('//p[@class="ac"]') as $content) 
   echo  $dom->saveHTML($content);
echo '<br />';