2010-12-01 33 views
1

Comment?Utilisation de Zend_Dom comme grattoir d'écran

Plus au point ...

ceci:

$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); 
$result = $dom->query('div.note'); 
Zend_Debug::dump($result); 

me donne ceci:

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

Et je ne peux pas pour la vie de me comprendre comment faire quoi que ce soit avec ce. Je veux extraire les différentes parties des données récupérées (c'est-à-dire le div avec la classe "note" et n'importe lequel des éléments à l'intérieur ... comme le texte et les URLs) mais rien ne fonctionne. Quelqu'un m'a pointé vers la classe DOMElement sur php.net mais quand j'essaie d'utiliser certaines des méthodes mentionnées, je n'arrive pas à faire fonctionner les choses. Comment pourrais-je attraper un morceau de html d'une page et le passer en saisissant les différentes parties? Comment puis-je inspecter cet objet que je récupère pour que je puisse au moins comprendre ce qu'il contient?

Hjälp?

Répondre

4

La Iterator mise en œuvre de Zend_Dom_Query_Result retourne un objet DOMElement pour chaque itération:

foreach ($result as $element) { 
    var_dump($element instanceof DOMElement); // always true 
} 

A partir de la variable d'élément de $, vous pouvez utiliser la méthode DOMElement:

foreach ($result as $element) { 
    echo 'Element Id: '.$element->getAttribute('id').PHP_EOL; 
    if ($element->hasChildNodes()) { 
     echo 'Element has child nodes'.PHP_EOL; 
    } 
    $aNodes = $element->getElementsByTagName('a'); 
    // etc 
} 

Vous pouvez également accéder à le document element, ou vous pouvez utiliser Zend_Dom_Query_Result pour le faire:

$document1 = $element->ownerDocument; 
$document2 = $result->getDocument(); 
var_dump($document1 === $document2); // true 
echo $document1->saveHTML(); 
+0

C'était la direction dont j'avais besoin. Maintenant, je travaille avec des résultats très bien. Merci beaucoup pour l'explication et les conseils. – Lothar