FluentDOM - jQueryライクなPHPのDOMElementラッパー
サーバ側(PHP)とクライアント側(Javascript)でDOMアクセスの書き方が異なるのが面倒、ということへの回答か、FluentDOMというPHPのプロジェクトが始まっていました。 jQueryライクに、ということですけど、要素の選択はCSSセレクタじゃなくてXPathで行ないます。PHPのDOMDocument, DOMXPathを使ってるからこっちの方が実装が楽だということらしいです。(CSSセレクタからXPath表記への変換もToDoには入っています) 全部の
のテキストを抜き出すという処理を、素のPHPで書いたのと、FluentDOMで書いてみました。
<?php $xml = <<<XML <html> <head></head> <body> <div> <p>Hello</p> <p>cruel</p> <p>World!</p> </div> </body> </html> XML; // PHP DOMDocument $dom = new DOMDocument; $dom->loadXML($xml); $xpath = new DOMXPath($dom); $node_list = $xpath->query('//p'); for($i=0; $i<$node_list->length; $i++){ $node = $node_list->item($i); echo $i . ': ' . $node->nodeValue . "\n"; } // simplexml拡張 $gottenObj = simplexml_load_string($xml); $counter = 0; foreach ($gottenObj->xpath('//p') as $item) { $counter++; echo $counter, ': ', $item, "\n"; } // FluentDOM.php require_once('../FluentDOM.php'); foreach (FluentDOM($xml)->find('//p') as $key => $value) { echo $key, ': ', $value->nodeValue, "\n"; }
jQueryのメソッド名とまったく同じものが使える(nextだけPHPのイテレータと衝突するので、兄弟=siblingsをつけたnextSiblings, prevSiblingsになっている)ので、jQueryでのDOM操作に慣れているPHPユーザは楽かもしれませんね。 AJAX Magazine: FluentDOM, PHP DOM Manipulation ala jQuery