JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > XML(DOM)編  
メニュー
Home
情報交換掲示板
ツールの部屋
Java関連の書籍
アプリケーション編
Swing編
Swing(イベント)編
Swing(Look&Feel)編
アプレット編
iアプリ編
サーブレット編
サーブレット(Linux)編
サーブレット(web.xml)編
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
JSP編
JSP(ディレクティブ)編
JSP(アクション)編
JSP(スクリプト)編
JSP(オブジェクト)編
JSP(カスタムタグ)編
JSP(データベース)編
Apache + Tomcat編
Struts編
JDBC編
JDBC(データソース)編
JDBC(MySQL)編
JDBC(PostgreSQL)編
JDBC(トランザクション)編
JavaMail(SMTP)編
JavaMail(POP)編
JNI編
RMI編
RMI(アプレット)編
CORBA編
JNDI編
EJB編
EJB(Entity Bean)編
JMS(PTP)編
JMS(Pub/Sub)編
XML(SAX)編
XML(DOM)編
XSLT編
SOAP編
国際化編
国際化(タイムゾーン)編
国際化(通貨)編
リフレクション編
コレクション編
コレクション(Set)編
コレクション(List)編
コレクション(Map)編
スレッド編
正規表現編
アサーション編
ログ機能編
サウンド編
ファイル入出力編
URL編
ソケット編
データグラム編
HTTP
FTP編
jar編
javadoc編
Ant編
外部コマンド編
プロパティファイル編
システムプロパティ編
Eclipse編
  2002/02/03  田中宏和
Last Update 2002/12/12
XML(DOM)編
◆DOMとは?
DOMDocument Object Modelの略です。XMLにアクセスするためのAPI(Application Programming Interface)です。W3Cによって仕様が公開されています。DOMは、XML文書をツリー構造として扱います。これを「DOMツリー」といいます。XML文書全体を解析してDOMツリーとしてメモリ上に保存するのでデータの多いXML文書を解析する場合は多くのメモリを消費します。
◆DOMツリーとは?
DOMツリーとはDOMがメモリ上に作成したXML文書全体の階層構造のことです。XML文書は階層構造で表現することができます。実際に階層構造を見てみることにします。
■XML文書
site.xml(ここからダウンロード)
<?xml version="1.0" encoding="Shift_JIS" ?>
<site>
  <title>JavaでHello World</title>
  <page id="28">
    <title>EJB編</title>
    <file>ejb.htm</file>
  </page>
  <page id="33">
    <title>DOM編</title>
    <file>xmldom.htm</file>
  </page>
</site>
■DOMツリーの階層構造
■ノードとは
ノードとは上の図の四角の部分のことを言います。ドキュメントノード、要素ノード、属性ノード、テキストノードなどがあります。
 
◆ここでの環境
OS Windows 2000
J2SE SDK 1.3.1_01
◆Javaの実行環境の構築
アプリケーション編を参考にJ2SE SDKをインストールしてJavaの実行環境を構築します。
◆DOMのAPIのライブラリをCLASSPATHに追加(J2SE SDK 1.3以下の場合)
J2SE SDKのバージョンが1.3以下の場合、DOMのAPIを使用可能にしなければなりません。1.4以上の場合はJ2SE SDKにDOMのAPIが含まれているので追加する必要はありません。ここでは、JAXP(Java API for XML Processing)を使用します。JAXPはJava XML Packに入っています。
Java XML Packのダウンロード → Java XML Pack
ダウンロードしましたら解凍したフォルダに入っているjaxp-api.jar、dom.jar、sax.jar、xercesImpl.jarをCLASSPATHに追加してください。追加方法はアプリケーション編を参考にしてください。
◆テキストノードの値「Hello World」を表示するプログラムの作成
■XMLファイルの用意
テキストエディタで以下の内容のXMLファイルを作成してください。
helloworld.xml(ここからダウンロード)
<?xml version="1.0" encoding="Shift_JIS" ?>

<message>Hello World</message>

■Javaソースコード
ここでは、最初の子ノードの値を表示するソースを作成します。
HelloWorldDOM.java(ここからダウンロード)
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class HelloWorldDOM {
  public static void main (String[] args) {
    try {
      // ドキュメントビルダーファクトリを生成
      DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
      // ドキュメントビルダーを生成
      DocumentBuilder builder = dbfactory.newDocumentBuilder();
      // パースを実行してDocumentオブジェクトを取得
      Document doc = builder.parse(new File("helloworld.xml"));
      // ルート要素を取得(タグ名:message)
      Element root = doc.getDocumentElement();
      // 最初の子ノード(テキストノード)の値を表示
      System.out.print(root.getFirstChild().getNodeValue());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
 
■コンパイルと実行
コマンドプロンプト

C:\JavaHello\DOM>javac HelloWorldDOM.java

C:\JavaHello\DOM>java HelloWorldDOM
Hello World

C:\JavaHello\DOM>

おおおお!!表示されましたね!
 
◆リストを表示するプログラムの作成
ここではリストを表示するプログラムを作成します。
■XMLファイルの用意
テキストエディタで以下の内容のXMLファイルを作成してください。
site.xml(ここからダウンロード)
<?xml version="1.0" encoding="Shift_JIS" ?>
<site>
  <title>JavaでHello World</title>
  <page id="28">
    <title>EJB編</title>
    <file>ejb.htm</file>
  </page>
  <page id="33">
    <title>DOM編</title>
    <file>xmldom.htm</file>
  </page>
</site>
■Javaソースコード
上で作成したXMLからpageのリストを表示してみたいと思います。
HelloWorldDOMPageList.java(ここからダウンロード)
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;

public class HelloWorldDOMPageList {
  public static void main(String[] args) {
    try {
      // ドキュメントビルダーファクトリを生成
      DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
      // ドキュメントビルダーを生成
      DocumentBuilder builder = dbfactory.newDocumentBuilder();
      // パースを実行してDocumentオブジェクトを取得
      Document doc = builder.parse(new File("site.xml"));
      // ルート要素を取得(タグ名:site)
      Element root = doc.getDocumentElement();
      System.out.println("ルート要素のタグ名:" + root.getTagName());

      System.out.println("***** ページリスト *****");
      // page要素のリストを取得
      NodeList list = root.getElementsByTagName("page");
      // page要素の数だけループ
      for (int i=0; i < list.getLength() ; i++) {
        // page要素を取得
        Element element = (Element)list.item(i);
        // id属性の値を取得
        String id = element.getAttribute("id");
        // title要素のリストを取得
        NodeList titleList = element.getElementsByTagName("title");
        // title要素を取得
        Element titleElement = (Element)titleList.item(0);
        // title要素の最初の子ノード(テキストノード)の値を取得
        String title = titleElement.getFirstChild().getNodeValue();
        // file要素のリストを取得
        NodeList fileList = element.getElementsByTagName("file");
        // file要素を取得
        Element fileElement = (Element)fileList.item(0);
        // file要素の最初の子ノード(テキストノード)の値を取得
        String file = fileElement.getFirstChild().getNodeValue();

        System.out.println("ID:" + id + "  " +
                           "タイトル:" + title + "  " +
                           "ファイル:" + file);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
 
■コンパイルと実行
コマンドプロンプト

C:\JavaHello\DOM>javac HelloWorldDOMPageList.java

C:\JavaHello\DOM>java HelloWorldDOMPageList
ルート要素のタグ名:site
***** ページリスト*****
ID:28 タイトル:EJB編 ファイル:ejb.htm
ID:33 タイトル:DOM編 ファイル:xmldom.htm

C:\JavaHello\DOM>

おおお!リストが表示できましたね!!
 
■書籍
Java関連の書籍
XML関連の書籍

 
  ネットで買えば断然お得!お買い物なら楽天市場
ツールの部屋 - Java関連の書籍 - デザインパターン - 情報交換掲示板 - HOME