Zend_Dom_Queryは、HTMLファイルにDOM形式でアクセスできるようになるよ、というクラスです。
これまでもSimpleXMLとかTidyとか使っていましたが、これらと違う最大の特徴が、「CSSパスでもXpathでもアクセスできる」という点です。
セレクタとしてはjQueryレベルの簡単最強な使い勝手を誇ります。
例としてこちらのページをパースしてみます。
http://framework.zend.com/manual/ja/manual.html
結果、Zend_AclからZendX_JQueryまでをリストアップすることができます。
なお、CSSパス「body div[id="page"] div#main-holder div.content [class*="content"] div #manual div.info ul>li[3] ul>li」をXPathに変換した結果はこんなことになります。
//body//div[@id='page']//div[@id='main-holder']//div[contains(concat(' ', normalize-space(@class), ' '), ' content ')]//*[contains(@class, 'content')]//div//*[@id='manual']//div[contains(concat(' ', normalize-space(@class), ' '), ' info ')]//ul/li[3]//ul/li|//body//div[@id='page']//div[@id='main-holder']//div[contains(concat(' ', normalize-space(@class), ' '), ' content ')][contains(@class, 'content')]//div//*[@id='manual']//div[contains(concat(' ', normalize-space(@class), ' '), ' info ')]//ul/li[3]//ul/li
なんだこりゃ。
道理で誰もXPath使わないわけだ。
これまでもSimpleXMLとかTidyとか使っていましたが、これらと違う最大の特徴が、「CSSパスでもXpathでもアクセスできる」という点です。
セレクタとしてはjQueryレベルの簡単最強な使い勝手を誇ります。
例としてこちらのページをパースしてみます。
http://framework.zend.com/manual/ja/manual.html
<?php //クラス require_once('Zend/Dom/Query.php'); $domQuery = new Zend_Dom_Query(); //パース $text = file_get_contents('http://framework.zend.com/manual/ja/manual.html'); $domQuery->setDocument($text, 'UTF-8'); //CSSパスを指定 $domResult = $domQuery->query('body div[id="page"] div#main-holder div.content [class*="content"] div #manual div.info ul>li[3] ul>li'); //中身を順に処理 foreach($domResult as $key=>$domElement){ //DOMElementが入ってくる print($domElement->nodeValue . " : " . $domElement->firstChild->getAttribute('href') . '<br />'); } //CSSパス→XPathに変換できる print($domResult->getXpathQuery());この長いCSSパス指定で、「Zend Framework リファレンス」の各Zend Frameworkのリストを指定しています。
結果、Zend_AclからZendX_JQueryまでをリストアップすることができます。
なお、CSSパス「body div[id="page"] div#main-holder div.content [class*="content"] div #manual div.info ul>li[3] ul>li」をXPathに変換した結果はこんなことになります。
//body//div[@id='page']//div[@id='main-holder']//div[contains(concat(' ', normalize-space(@class), ' '), ' content ')]//*[contains(@class, 'content')]//div//*[@id='manual']//div[contains(concat(' ', normalize-space(@class), ' '), ' info ')]//ul/li[3]//ul/li|//body//div[@id='page']//div[@id='main-holder']//div[contains(concat(' ', normalize-space(@class), ' '), ' content ')][contains(@class, 'content')]//div//*[@id='manual']//div[contains(concat(' ', normalize-space(@class), ' '), ' info ')]//ul/li[3]//ul/li
なんだこりゃ。
道理で誰もXPath使わないわけだ。
PR