クエリ結果の利用
最後にクエリした結果の処理の方法です。前にも述べたとおり、Zend_Dom_QueryのqueryメソッドないしqueryXpathメソッドはZend_Dom_Query_Resultクラスのインスタンスを返します。
このZend_Dom_Query_Resultには、クエリの結果見つかった要素がリストのように格納されています。Zend_Dom_Query_ResultはCountableインターフェイスと Iteratorインターフェイスを実装しているので、foreach文などを使って各要素を取り出すことができます。
また、クエリの対象や内容に関しての情報を取り出すためのメソッドも提供されています。
| メソッド名 | 説明 |
| getCssQuery | クエリがCSSセレクタによるものだった場合は、そのクエリの内容を返す。 |
| getXpathQuery | クエリをXPathで記述した内容を返す。 |
| getDocument | クエリの対象となった文書を返す。 |
Zend_Dom_Query_Resultに格納されている要素はPHP標準のDOMElementクラスのインスタンスになっています。このクラスの主なプロパティやメソッドは次のとおりです(詳細についてはDOMElementクラスの説明やその親クラスであるDOMNodeクラスの説明を参照してください)。
| 名前 | 引数 | 説明 |
| tagName | (プロパティ) | タグ名 |
| getAttribute | $name | 名前$nameの属性の値を返す |
| nodeValue | (プロパティ) | 要素の値 |
| parentNode | (プロパティ) | 要素の親要素 |
| childNodes | (プロパティ) | 要素の子要素、DOMNodeListクラス |
クエリの結果得られた要素の値は、リスト6のようにforeachループとDOMElementクラスのnodeValueプロパティを利用して取り出すことができます。
// クエリの実行
$results = $zend_dom_query->query($query);
// クエリ結果の利用
// 見つかった要素の内容を表示
foreach ($result as $domelement) {
echo $domelement->nodeValue."\n";
}
上で「Zend_Dom_Query_ResultはCountableインターフェイスと Iteratorインターフェイスを実装している」と述べましたが、これは具体的にはどのような意味なのでしょうか? ちなみに、どちらのインターフェイスも、配列のように子要素をいくつか含むオブジェクトで利用されるのが普通です。
Countableインターフェイスは「count」メソッドのみが定義されたインターフェイスで、オブジェクトに含まれる子要素の数が分かることを意味しています。「count」メソッドはオブジェクトに含まれる子要素の数を返します。
また、Iteratorインターフェイスは「current」「key」「next」「rewind」「valid」の4つのメソッドが定義されたインターフェイスで、オブジェクトに含まれる子要素に順番にアクセスできることを意味しています。通常は、このメソッドを直接使うのではなく、foreach文を利用して子要素を取得することになります。
おわりに
今回はDOMを操作するためのモジュールZend_Domについての解説を行いました。HTML文書やXML文書を解析し、CSSセレクタでクエリをかけた結果をDOM形式で返してくれるため、外部のサービスが提供する文書を利用する際の強力な道具になることがお分かりいただけたと思います。
次回からは、Zend Framework 1.8から導入されたRAD(Rapid Application Development)関係の機能について見ていきたいと思います。最初はスクリプトを利用したMVCアプリケーション環境の自動的なセットアップの利用の方法について紹介します。
