連載
» 2001年02月10日 00時00分 公開

Javaで実現するDOM/SAXプログラミング(2):初めてJavaでXML文書を操作してみる (2/3)

[太田一郎,ティアイエス株式会社]

ノードツリーの生成

 最初は、ノードのツリーを生成する手順について見てみましょう。JAXPでは「ドキュメントビルダ」と呼ばれるオブジェクトにXML文書を入力として与え、ノードのツリーを生成させます。

 ドキュメントビルダを生成し、実際にノードツリーを生成するまでの流れは、おおむね以下のようになります。

  • ドキュメントビルダファクトリの生成
  • ドキュメントビルダの生成
  • パース

ドキュメントビルダファクトリの生成

 ドキュメントビルダのオブジェクトを生成するためには、まずそのオブジェクトを生成する、ファクトリと呼ばれるオブジェクトを生成する必要があります。

 オブジェクトを作るために、まずそのオブジェクトを作るためのオブジェクトを作る……ちょっと聞くと非常にややこしいのですが、これにはちゃんと理由があります。

 前回、「XMLの各種ライブラリは、パーサのオブジェクトをインスタンス化するところを除いてインターフェイスは同じ」というような意味のことを書きました。この最初の「パーサのオブジェクトをインスタンス化」するところが、ファクトリの中に隠ぺいされているのです。利用者はファクトリを生成することで、具体的にどのライブラリのパーサを利用するのか意識することなく、適切なパーサのインスタンスを取得することができるようになっています。

 このような仕組みは「Factoryパターン」と呼ばれ、オブジェクト指向プログラミングでの常とう手段です。Xercesのみを使うようになっている状態でのファクトリは、当然のことながらXercesのパーサを返すようになっています。このパーサをJAXPではドキュメントビルダと呼んでいるわけです。

 実際のコーディングでは、以下のように書くだけです。

DocumentBuilderFactory factory =
  DocumentBuilderFactory.newInstance();

 このようにして得られたfactoryを用いて、ドキュメントビルダを生成します。

 なお、これらのコードを実際に試す場合は、以下のようにインポートの宣言をしておいてください。

import javax.xml.parsers.*;
import org.w3c.dom.*;

ドキュメントビルダの生成

 では、実際にドキュメントビルダのインスタンスを生成してみましょう。これも非常に簡単で、以下のようなコードを書くだけです。

DocumentBuilder builder = factory.newDocumentBuilder();

 検証を行うつもりなら、インスタンスを生成する前に以下のようなコードを挿入します。

factory.setValidating(true);

 javadocなどでJAXPのインターフェイスを確認していただければ分かるのですが、実はこれ以外にもいろいろと設定を行うことが本来は可能です。しかしながらXercesの1.2.3では、そのほとんどがまだ有効化されていませんので注意してください。

パース

 ドキュメントビルダのインスタンスを生成したら、パースするメソッドを呼び出してノードツリーを取得します。パースするXML文書のURIが分かっているなら、以下のようにコードを書くだけです。

String uri = "....."; // 実際のURIを指定します
Node root = builder.parse(uri);

 URIだけでなく、InputStreamおよびFileオブジェクトのインスタンスも渡すことができますので、必要に応じて使い分けるとよいでしょう。

 さて、以上の手順でノードツリーのインスタンスを取得することができました。それでは、このノードツリーの操作について見ていくことにします。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。