XMLとの連携・活用
JavaからXMLを操作するために必要なものは何ですか?

テンアートニ 中越智哉
2001/10/25

 XMLが業務システムでどのように使われているかは、前項の解説で理解していただけたと思います。ここでは、実際にJavaのコードからXMLを操作するための手順を、簡単なサンプルコードを交えながら解説します。

■必要な道具立て

 JavaからXMLを操作するために必要なものは、次の2つです。

  • JDK(1.1.8以上)
  • JAXP(Java API for XML Processing)を実装したパーサ

 JavaでのXMLの扱いについては、これまで特に標準となる仕様はなく、SAXやDOMの仕様に従って操作を行うことのできるライブラリが、各ベンダから提供されていました。このことは、当然ながら、コーディングにベンダ依存性をもたらしてしまいます。そこで、XML文書を操作するAPIの統一した仕様を、サン・マイクロシステムズ(以下サン)が提供することで、ベンダ間の依存性をなくしていこうという目的で、JAXPが登場しました。

 サンが提供しているのはあくまでAPIなどの「仕様」の部分だけで、実装については、基本的には各ベンダに任されています。JAXPにはリファレンス実装も提供されていますので、とりあえず試してみたいという場合には、JAXPをダウンロードするだけでも動作させることは可能です。ここでは、このリファレンス実装を用いることにします。

※J2EE 1.3には、JAXP 1.1が含まれています。今後リリースされるJ2SE 1.4にも、JAXP 1.1が含まれることになっています。

■APIの簡単な紹介

 JAXPに含まれるパッケージは、以下のようなものがあります。

javax.xml.parsers
javax.xml.transform
javax.xml.transform.dom
javax.xml.transform.sax
javax.xml.transform.stream
org.w3c.dom
org.xml.sax
org.xml.sax.ext
org.xml.sax.helpers

 パッケージ名から分かるように、JAXPはJ2SEに含まれています。また、org.w3c.domや、org.xml.*のようなパッケージも含まれていますが、これらはDOMやSAXの使用にのっとったAPIで、JAXP独自のものではありません。

■サンプルコードを動かしてみる

(セットアップ手順)

 JAXPのリファレンス実装を使うための手順は、以下のようになります。

  1. JDKをインストール
  2. JAXPを適当なディレクトリに展開
  3. JAXPのJARファイルにCLASSPATHを通す(または、Java2の場合、
  4. JAVA_HOME/jre/lib/ext にJARファイルを配置すると、CLASSPATHを設定しなくてもよい)

 今回は、パス設定については後者の方法を用います。

(サンプルコードの動作)

 では、簡単なサンプルコードを作成し、動作を確認してみましょう。サンプルコードは以下のリンクからダウンロードしてください。以下の記事は、サンプルコードを参照していることを前提に説明を進めます。

サンプルコード:JaxpDomSample.java


 このサンプルは、DOMでタグ操作を行うコンソールベースのアプリケーションです。タグ名を入力すると、その名前に一致するノードの先頭の子ノードの値を表示してくれます。つまり、

<servlet-name>login</servlet-name>

という記述があったとして、「servlet-name」と入力すると、「login」が値として表示されます。また、

<servlet>
<servlet-name>login</servlet-name>
<servlet-class>jp.co.tenartni.LoginServlet</servlet-class>

といったような文書の場合に、「servlet」と入力すると、<servlet>タグの直後の改行と、空白が値として表示されます。

(文書を操作するまでの簡単な流れ)
 XML文書の操作の方法には、SAXとDOMの2つの方法がありますが、ここでは、DOMを使った場合の操作の手順を示します。パッケージ名は省略されていますが、Javadocなどを参照していただければ調べることができます。

(1) パーサを作成する

 まず、

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

で、パーサのインスタンスを作成することのできるDocumentBuilderFactoryを取得します。その後、

DocumentBuilder builder = factory.newDocumentBuilder();

で、パーサ(DocumentBuilder)のインスタンスを取得します。

(2) XML文書の扱いについて必要な設定を行う

 上記で、DocumentBuilderを取得する前に、

factory.setValidating(true);
factory.setNamespaceAware(true);

を行うと、XMLパーサの動作について設定を行うことができます。これらの設定を行わなかった場合は、XMLパーサは、nonvalidatingで、namespaceも使用しないものとして生成されます。

 前者は、validatingなパーサを生成するための設定、後者は、namespaceを使用するパーサを生成するための設定です。このサンプルでは、どちらの設定も特に必要ありませんので、記述自体を省略してもよいでしょう。

(3) XMLファイルを、DOMのインスタンスに読み込む

 パーサを取得したら、

Document document = builder.parse( new File(filename) );

で、文書のパース(解析)を行った後、その文書の内容を格納したDOMツリーを取得することができます。

(4) DOMに対して、読み込み、書き換えなどの操作を行う

 Documentオブジェクトが取得できたら、あとはこのオブジェクトに対して操作を行うことになります。操作についての詳細は割愛しますが、この部分は、JAXPでも、既存のパーサでもW3Cの仕様に従って実装されていますので、XMLフォーラムなどの記事を参考にしていただけると思います。

(実行手順)

 クラスファイルのあるディレクトリに移動し、

java -cp . JaxpDomSample XMLファイル名

で、実行できます。

 「タグ名を入力>>」のプロンプトが出たら、表示したいタグ名を入力します。「*」を入力すると、すべてのタグの情報を表示します。「.」を入力すると終了します。

実行画面

[参考URL]
Java Technology & XML
Javadoc
JAXPのチュートリアル

 

「Java Solution FAQ」





Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間