カテゴリー
技術

FluentDOM – jQueryライクなPHPのDOMElementラッパー

サーバ側(PHP)とクライアント側(Javascript)でDOMアクセスの書き方が異なるのが面倒、ということへの回答か、FluentDOMというPHPのプロジェクトが始まっていました。 jQueryライクに、ということ […]

サーバ側(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