Zend_Dom bir DOMElement verir ...

0 Cevap php

(Ben bir başlık, bazı vücut metin ve web sitemdeki haber küçük bir blok bir bağlantı kapmak istiyorum) ve ben DOMElement işlemek için nasıl emin değilim bazı çok hafif ekran kazıma için Zend_Dom kullanmaya çalışıyorum ki bana verir.

Zend_Dom için kılavuzdaki kod diyor ki:

foreach ($results as $result) {
    // $result is a DOMElement
}

Bunu nasıl DOMElement kullanımı yapabilirim?

(Çapa Google'da elemanlar arıyor) ayrıntılı bir örnek:

$url='http://google.com/';
$client = new Zend_Http_Client($url);
$response = $client->request();
$html = $response->getBody();
$dom = new Zend_Dom_Query($html);
$results = $dom->query('a');
foreach($results as $r){
     Zend_Debug::dump($r);
}

Bu bana verir:

object(DOMElement)#81 (0) {
}
object(DOMElement)#82 (0) {
}
object(DOMElement)#83 (0) {
}
... etc, etc...

Ne kafa karıştırıcı bulabilirsiniz her öğe (0) hiçbir şey içerir gibi bu görünüyor olmasıdır! Bu durum değil ama bu benim ilk izlenim. Bu yüzden online etrafında karıştırmak ve ben bu işten bir şey almak için nodeValue ekleyebilirsiniz bulabilirsiniz:

Zend_Debug::dump($r->nodeValue);

bana verir:

string(6) "Images"
string(6) "Videos"
string(4) "Maps"
...etc, etc...

Ama sorun haline çalıştırmak nerede belirli öğeleri ve bunların içeriğini oluyor.

Örneğin bu html verilen:

  <div class="newsBlurb">
   <span class="newsDate">Mon, 11 October 2010</span>
   <h3 class="newsHeadline"><a href="http://foo.com/1/2/">Some text</a></h3>
   <a class="newsMore" href="http://foo.com/1/2/">More</a>
  </div> 
  <div class="hr"></div>
  <div class="newsBlurb">
   <span class="newsDate">Mon, 16 August 2010</span>
   <h3 class="newsHeadline"><a href="http://bar.com/pants.html">Stuff is here</a></h3>
   <a class="newsMore" href="http://bar.com/pants.html">More</a>
  </div> 

Ben Google örnekte kullandığımız tekniği kullanılarak, her newsBlurb metni kapmak, ancak kendisi tarafından her eleman alınamıyor. Ben tarih olsun ve yere sopa, başlık metni almak ve yere sopa ve bağlantı kullanmak için almak istiyorum. Ama olsun tüm div gerçek metindir.

Nasıl bu gelen istediğimi alabilirim?


EDIT Here is another example that does not work as I expect. Any ideas why?

$url = 'http://php.net/manual/en/class.domelement.php';
$client = new Zend_Http_Client($url);
$response = $client->request();
$html = $response->getBody();
$dom = new Zend_Dom_Query($html);
$newsBlurbNode = $dom->query('div.note');
Zend_Debug::dump($newsBlurbNode);

Bu bana verir:

object(Zend_Dom_Query_Result)#867 (7) {
  ["_count":protected] => NULL
  ["_cssQuery":protected] => string(8) "div.note"
  ["_document":protected] => object(DOMDocument)#79 (0) {
  }
  ["_nodeList":protected] => object(DOMNodeList)#864 (0) {
  }
  ["_position":protected] => int(0)
  ["_xpath":protected] => NULL
  ["_xpathQuery":protected] => string(33) "//div[contains(@class, ' note ')]"
}

Ben bu kullanılan dışında bir şey almaya çalışırken:

$children = $newsBlurbNode->childNodes;
     foreach ($children as $child) {
       }

Hangi foreach döngüsü içinde hiçbir şey çünkü hatayla sonuçlanır. Uçaksavar! Ne almıyorum?

0 Cevap