Recupera elementi con xpath e DOMDocument

Ho un elenco di annunci nel codice html qui sotto. Quello di cui ho bisogno è un loop PHP per get gli elementi folowing per each annuncio:

  1. URL dell'annuncio (attributo href del tag <a> )
  2. URL dell'image annuncio (attributo src del tag <img> )
  3. titolo dell'annuncio (contenuto html di <div class="title"> )
 <div class="ads"> <a href="http://path/to/ad/1"> <div class="ad"> <div class="image"> <div class="wrapper"> <img src="http://path/to/ad/1/image.jpg"> </div> </div> <div class="detail"> <div class="title">Ad #1</div> </div> </div> </a> <a href="http://path/to/ad/2"> <div class="ad"> <div class="image"> <div class="wrapper"> <img src="http://path/to/ad/2/image.jpg"> </div> </div> <div class="detail"> <div class="title">Ad #2</div> </div> </div> </a> </div> 

Sono riuscito a get l'URL dell'annuncio con il seguente codice PHP.

 $d = new DOMDocument(); $d->loadHTML($ads); // the variable $ads contains the HTML code above $xpath = new DOMXPath($d); $ls_ads = $xpath->query('//a'); foreach ($ls_ads as $ad) { $ad_url = $ad->getAttribute('href'); print("AD URL : $ad_url"); } 

Ma non sono riuscito a get gli altri 2 elementi (URL image e titolo). Qualche idea?

per altri elementi, fai semplicemente lo stesso:

 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']") } 

Sono riuscito a get quello che mi serve con questo codice (basato sul codice di Khue Vu):

 $d = new DOMDocument(); $d->loadHTML($ads); // the variable $ads contains the HTML code above $xpath = new DOMXPath($d); $ls_ads = $xpath->query('//a'); foreach ($ls_ads as $ad) { // get ad url $ad_url = $ad->getAttribute('href'); // set current ad object as new DOMDocument object so we can parse it $ad_Doc = new DOMDocument(); $cloned = $ad->cloneNode(TRUE); $ad_Doc->appendChild($ad_Doc->importNode($cloned, True)); $xpath = new DOMXPath($ad_Doc); // get ad title $ad_title_tag = $xpath->query("//div[@class='title']"); $ad_title = trim($ad_title_tag->item(0)->nodeValue); // get ad image $ad_image_tag = $xpath->query("//img/@src"); $ad_image = $ad_image_tag->item(0)->nodeValue; }