SHOEISHA iD

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

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

japan.internet.com翻訳記事

PHPでDOMを操作する

PHP 5のDOMエクステンションで、DOMツリーをゼロから作成

  • このエントリーをはてなブックマークに追加

 Document Object Model(DOM)とは、XML(またはHTML)文書をツリー構造のオブジェクトとして表現するための一連のインターフェースを定めたW3C規格です。本稿ではPHP 5のDOMエクステンションを使用し、PHP 5でDOMツリーをゼロから作成する(または既存のDOMツリーを変更する)方法を説明します。

  • このエントリーをはてなブックマークに追加

はじめに

 Document Object Model(DOM)とは、XML(またはHTML)文書をツリー構造のオブジェクトとして表現するための一連のインターフェースを定めたW3C規格です。DOMツリーは文書の論理的な構造を定義し、プログラムによる文書の操作を制御します。開発者はDOMを使用して、XML文書やHTML文書の作成、ツリー構造内での移動、要素やコンテンツの追加、変更、削除を行うことができます。DOMは任意のプログラミング言語から操作できます。本稿ではPHP 5のDOMエクステンションを使います。これはPHPコアに既に実装されているので、別途インストールすべきものは特にありません。

 DOMツリーはXML規約に基づいて命名されたノードで構成されます。よく知られているDOMノードには次のものがあります。

  • Documentノード(DOMDocumentインターフェースで表現)
  • Elementノード(DOMElementインターフェースで表現)
  • Attributeノード(DOMAttrインターフェースで表現)
  • Commentノード(DOMCommentインターフェースで表現)
  • Textノード(DOMTextインターフェースで表現)

要素を抽出する

 DOMツリーから要素と値を抽出する方法を具体的に説明します。本稿で使用するサンプル文書「Book.xml」をリスト1に示します。

リスト1 Book.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<book>
<!--XML Processing [part I] -->
  <name>XML Processing I</name>
  <author>John Smith Jr.</author>
  <publisher>HisOwnTM</publisher>
  <ISBN>111-222-333-4441</ISBN>
  <contents>
    <chapter_I>
      <title>What is XML about ?</title>
      <content>XML (Extensible Markup Language) is a ...</content>
    </chapter_I>
    <chapter_II>
      <title>SAX</title>
      <content>SAX is a simple API for ...</content>
    </chapter_II>
    <chapter_III>
      <title>StAX</title>
      <content>Much powerful and flexible, StAX, is very...</content>
    </chapter_III>
    <chapter_IV>
      <title>DOM
        <subtitle>DOM concept
          <continut>Starting to use DOM...</continut>
        </subtitle>
        <subchapter_IV_I>
          <title>First DOM application...</title>
          <content>Here it is your first DOM application...</content>
        </subchapter_IV_I> 
      </title>            
    </chapter_IV>         
    <end>The end...</end>         
  </contents>
<!-- See you in XML Processing [part II] -->
</book>

 以降の説明に従って作業を進めるには、このBook.xmlを本稿のPHPサンプルアプリケーションと同じディレクトリに置いておきます(サンプルアプリケーションは記事先頭のリンクからダウンロード可能)。

 最初のアプリケーションではBook.xmlを使って、関連付けられたツリーを抽出し、いくつかの子ノードの最初のオカレンスをDOMElementインターフェースのgetElementsByTagNameメソッドを使って表示します。

getElementsByTagNameメソッド
DOMNodeList DOMElement::getElementsByTagName(string $name)

 このメソッドは、$nameパラメータで指定したタグ名を持つすべての子要素のリストを返します。次の例では、<book>ルートノードを検索し、そのすべての子要素<author><publisher><name>を検索して各要素の最初のオカレンスを選択し、それらのノードの値を出力します。

<?php
 // Create a document instance 
  $doc = new DOMDocument();
  //Load the Book.xml file
  $doc->load( 'Book.xml' );
  
  //Searches for all elements with the "book" tag name
  $books = $doc->getElementsByTagName( "book" );
 
  //Searches for all elements with the "author" tag name
  $authors = $doc->getElementsByTagName( "author" );
  //Returns the first element found having the tag name "author"
  $author = $authors->item(0)->nodeValue;
  
  //Searches for all elements with the "publisher" tag name
  $publishers = $doc->getElementsByTagName( "publisher" );
  //Returns the first element found 
  //having the tag name "publisher"
  $publisher = $publishers->item(0)->nodeValue;
  
  //Searches for all elements with the "name" tag name
  $titles = $doc->getElementsByTagName( "name" );
  //Returns the first element found having the tag name "name"
  $title = $titles->item(0)->nodeValue;
  
  //Printing the found values
  echo "$title - $author - $publisher \n";
?>

 最後の行では、検索された最初の書名、最初の著者、最初の出版社をハイフン(-)で区切って出力します。結果は次のようになります。

XML Processing I - John Smith Jr. - HisOwnTM

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
DOMツリーを再帰的に走査する

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

  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

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

Octavia Andreea Anghel(Octavia Andreea Anghel)

経験豊富なPHP開発者。現在は、国内外のソフトウェア開発コンテストに参加するプログラミングチームの主任トレーナーを務める。国レベルの教育プロジェクト開発のコンサルティングも担当している。共著書に『XML technologies?XML in Java』があり、XML部分の執筆を担当。PHPやXML...

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4278 2009/08/27 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング