如何?
更重要的是......
这样:
$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);
给了我这个:
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 ')]"
}
我不能为我的生活找出如何做到这一点。
我想提取检索到的数据的各个部分(即带有“note”类的div和它内部的任何元素......就像文本和URL一样)但是无法获得任何工作。
有人在php.net上指出了DOMElement类,但是当我尝试使用上面提到的一些方法时,我无法使用它。我如何从页面中抓取一大块html并通过它抓取各个部分?我如何检查这个对象我回来了所以我至少可以弄清楚它里面有什么?
Hjälp?
答案 0 :(得分:4)
Iterator
Zend_Dom_Query_Result
实现为每次迭代返回一个DOMElement
对象:
foreach ($result as $element) {
var_dump($element instanceof DOMElement); // always true
}
从 $ element 变量中,您可以使用任何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
}
您也可以访问document element,或者使用Zend_Dom_Query_Result
执行此操作:
$document1 = $element->ownerDocument;
$document2 = $result->getDocument();
var_dump($document1 === $document2); // true
echo $document1->saveHTML();