XMLとの連携・活用 |
|
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のリファレンス実装を使うための手順は、以下のようになります。
- JDKをインストール
- JAXPを適当なディレクトリに展開
- JAXPのJARファイルにCLASSPATHを通す(または、Java2の場合、
- JAVA_HOME/jre/lib/ext にJARファイルを配置すると、CLASSPATHを設定しなくてもよい)
今回は、パス設定については後者の方法を用います。
(サンプルコードの動作)
では、簡単なサンプルコードを作成し、動作を確認してみましょう。サンプルコードは以下のリンクからダウンロードしてください。以下の記事は、サンプルコードを参照していることを前提に説明を進めます。
サンプルコード:JaxpDomSample.java
このサンプルは、DOMでタグ操作を行うコンソールベースのアプリケーションです。タグ名を入力すると、その名前に一致するノードの先頭の子ノードの値を表示してくれます。つまり、
<servlet-name>login</servlet-name> |
という記述があったとして、「servlet-name」と入力すると、「login」が値として表示されます。また、
<servlet> |
といったような文書の場合に、「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); |
を行うと、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」 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|