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