2016-06-11 14 views
0

Я хочу, чтобы очистить сайт с помощью PHP, Вот код:Вернуться все результаты от xpath Dom parse?

<?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», Но я хочу, чтобы вернуть все результаты. Поэтому я редактировал код на:

<?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 />'; 
?> 

Но это дает мне эту ошибку:

Catchable fatal error: Object of class DOMElement could not be converted to string in

Что я делаю не так?

ответ

1

$ contents-> item ($ i) - объект DomElement. Вы можете распечатать $contents->item($i)->nodeValue, чтобы получить, например, текст абзаца или таким образом $content = $dom->saveHTML($contents->item($i)), чтобы получить внешний HTML.

Но я предпочел бы, такую ​​петлю

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

Спасибо! Прекрасно работает ! –

+0

Добро пожаловать! – splash58

+0

Как я могу заменить текст в html-файле здесь? Должен ли я использовать этот способ? echo $ dom-> saveHTML (str_replace ('text1', 'text2', $ content)); –