2016-06-11 12 views
0

Ich möchte eine Website mit PHP kratzen, ist Hier ist der Code:Alle Ergebnisse von 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 />'; 
?> 

Aber es wird nur die erste p-Tag zurück, die „ac“ Klasse hat, aber ich will es alle Ergebnisse zurückzukehren. So bearbeitete ich den Code zu:

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

Aber es gibt mir diese Fehlermeldung:

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

Was mache ich falsch?

Antwort

1

$ contents-> item ($ i) ist ein DomElement-Objekt. Sie können $contents->item($i)->nodeValue drucken, um zum Beispiel einen Absatztext zu erhalten, oder $content = $dom->saveHTML($contents->item($i)), um den Outerhtml zu erhalten.

Aber ich würde eine solche Schleife

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

Dank bevorzugen Funktioniert super ! –

+0

Gern geschehen! – splash58

+0

Wie kann ich einen Text in HTML-Ausgabe hier ersetzen? soll ich diesen Weg benutzen? echo $ dom-> saveHTML (str_replace ('text1', 'text2', $ content)); –

Verwandte Themen