SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend Framework入門

PHPアプリからCSSセレクタでHTML/XML文書を解析する - Zend_Dom -

Zend Frameworkによる実践的なPHPアプリケーション開発 22

クエリ結果の利用

 最後にクエリした結果の処理の方法です。前にも述べたとおり、Zend_Dom_QueryqueryメソッドないしqueryXpathメソッドはZend_Dom_Query_Resultクラスのインスタンスを返します。

 このZend_Dom_Query_Resultには、クエリの結果見つかった要素がリストのように格納されています。Zend_Dom_Query_ResultはCountableインターフェイスと Iteratorインターフェイスを実装しているので、foreach文などを使って各要素を取り出すことができます。

 また、クエリの対象や内容に関しての情報を取り出すためのメソッドも提供されています。

Zend_Dom_Query_Resultの主なメソッド
メソッド名 説明
getCssQuery クエリがCSSセレクタによるものだった場合は、そのクエリの内容を返す。
getXpathQuery クエリをXPathで記述した内容を返す。
getDocument クエリの対象となった文書を返す。

 Zend_Dom_Query_Resultに格納されている要素はPHP標準のDOMElementクラスのインスタンスになっています。このクラスの主なプロパティやメソッドは次のとおりです(詳細についてはDOMElementクラスの説明やその親クラスであるDOMNodeクラスの説明を参照してください)。

DOMElementの主なプロパティ/メソッド
名前 引数 説明
tagName (プロパティ) タグ名
getAttribute $name 名前$nameの属性の値を返す
nodeValue (プロパティ) 要素の値
parentNode (プロパティ) 要素の親要素
childNodes (プロパティ) 要素の子要素、DOMNodeListクラス

 クエリの結果得られた要素の値は、リスト6のようにforeachループとDOMElementクラスのnodeValueプロパティを利用して取り出すことができます。

[リスト6]Zend_Dom_Query_Resultから情報の取り出し
//  クエリの実行
$results = $zend_dom_query->query($query);

// クエリ結果の利用
//   見つかった要素の内容を表示
foreach ($result as $domelement) {
  echo $domelement->nodeValue."\n";
}
Countableインターフェイスと Iteratorインターフェイス

 上で「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アプリケーション環境の自動的なセットアップの利用の方法について紹介します。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Zend Framework入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4162 2009/08/07 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー