Revised: Oct./05th/2003
ここからは、実際にXML処理系でXMLを処理する方法を見ていきます。XML文書はXMLプロセッサ(パーサ)と呼ばれる装置が構文解析/字句解析し(パーズ)、その結果をアプリケーションが受け取ります。XML文書とアプリケーションの間にXMLプロセッサというインタフェースが必要だということです。
このとき、XMLプロセッサを操作するAPIとして、W3Cが勧告しているDOM (Document Object Model)や、デファクトスタンダードであるSAX (Simple API for XML)、DOMやSAXをラッピングして抽象化するJavaパッケージのJAXP (Java API for XML Processing)を使います。特に、JAXPはJ2SE 1.4以降ではコア・パッケージに含まれ、javax.xmlのサブパッケージとして利用することができます。
![]() |
図:JavaのXML文書処理モデル |
---|
フリーで利用可能なXMLプロセッサの代表的なものは、JAXPに同梱されているCrimson、Apache XMLプロジェクトで開発されているXercesの二つが挙げられます。特に、Xercesは精力的な開発が進められており、非常に高機能かつ安定したプロセッサです。本稿執筆時点ではXerces 2.5が安定版としてリリースされています。本稿では、Xerces2を使ってDOMとSAXのAPIを試してみましょう。
本稿で導入するXerces2 Java Parser 2.5.0は次の仕様を満たしています。
特筆すべきことは、Xercesが名前空間とXML Schemaをサポートしていることです。
本稿では、Xerces2 Java Parser 2.5.0を使います。Apache XMLプロジェクトのXerces2 Java ParserのページからDownloadを選択することで、各種のフォーマットで入手できます。Xerces-J-bin.2.5.0.zipのサイズは5.2Mとなっています。
ZIPファイルを解凍すると、ドキュメントとサンプルを含んだフォルダ"xerces-2_5_0"が生成されます。これを、Cドライブ直下に配置してください(C:\xerces-2_5_0)。
次に、C:\xerces-2_5_0に含まれているJARファイルを、xmlParserAPIs.jarを除いて、環境変数CLASSPATHに登録します。CLASSPATHに初めて登録するときは、カレント・ディレクトリを表すピリオドも登録するようにしてください。"C:\xerces-2_5_0"に導入した場合は、セットするパスは次の四つです。
C:\xerces-2_5_0\xml-apis.jar
C:\xerces-2_5_0\xercesImpl.jar
C:\xerces-2_5_0\xercesSamples.jar
.
以上のパスを、OS の環境変数 CLASSPATH に設定してください。設定方法の詳細は、「CLASSPATH」を参照ください。
実際にサンプルのいくつかを動かしてみましょう。まず、リスト1をUTF-8でC:\java\xml
にdemo.xml
で保存します。次のコマンドdom.Counterは、XML文書を解析してDOMツリーを作り、要素、属性、空白、文字などの個数をカウントしてくれるものです。
C:\java\xml>java dom.Counter c:\java\xml\demo.xml c:\java\xml\demo.xml: 110;15;0 ms (14 elems, 13 attrs, 0 spaces, 219 chars)
同様に、SAXのAPIでも同様のサンプルがsax.Counterとして用意されています。
C:\java\xml>java sax.Counter c:\java\xml\demo.xml c:\java\xml\demo.xml: 78 ms (14 elems, 13 attrs, 0 spaces, 219 chars)
また、Xerces2はXNI (Xerces Native Interface)と呼ばれるフレームワークに則っており、独自のAPIを使うこともできます。コマンドxni.CounterはXNIのAPIで上の二つと同じ事をしてくれます。
C:\java\xml>java xni.Counter c:\java\xml\demo.xml c:\java\xml\demo.xml: 78 ms (14 elems, 13 attrs, 0 spaces, 219 chars)