|
| |
2002/02/03 田中宏和 |
| Last Update
2002/12/12 |
|
 |
XML(DOM)編 |
 |
◆DOMとは? |
| DOMはDocument 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 |