Zend\Dom\QueryはHTMLをDOMで扱うクラスです。
前ZF1.11のZend_Dom_Queryを使いましたが、ぶっちゃけ同じです。
馴染みがない上にわかりにくいXPathではなく、よく使うCSSパスで扱えるのが非常に便利ですね。
ちなみにこのCSSパスからXPathへの変換、Zend\Dom\Css2Xpathで行われているのですが、なんと100行程度しかありません。
私がやったら1000行くらいかかりそうだ…
前ZF1.11のZend_Dom_Queryを使いましたが、ぶっちゃけ同じです。
<?php
//Zend\Dom\Query
require_once('path/to/channel/vendor/autoload.php');
$domQuery = new Zend\Dom\Query();
//パース
$text = file_get_contents('http://framework.zend.com/manual/2.0/en/index.html');
$domQuery->setDocument($text, 'UTF-8');
//パースしたドキュメントの形式 docXml / docHtml / docXhtml
print($domQuery->getDocumentType());
//libxml_get_errors
var_dump($domQuery->getDocumentErrors());
//CSSパスを指定
$nodeList = $domQuery->execute('body div#main-content-wrapper div#site-content section.manual div#programmersreferenceguideofzendframework2 div#zendframeworkreference div.section h3');
//中身を順に処理
foreach($nodeList as $key=>$domElement){
//DOMElementが入ってくる
print($domElement->firstChild->nodeValue . '<br />');
}
//CSSパス→XPathに変換できる
print($nodeList->getXpathQuery());
query()がexecute()にかわったくらいで、ほぼそのまま利用できます。馴染みがない上にわかりにくいXPathではなく、よく使うCSSパスで扱えるのが非常に便利ですね。
ちなみにこのCSSパスからXPathへの変換、Zend\Dom\Css2Xpathで行われているのですが、なんと100行程度しかありません。
私がやったら1000行くらいかかりそうだ…
PR