前回までの SAX API とはうって変わって、今回からは DOM API 。 SAX API のときとは違って、 org.w3c.dom パッケージ内のクラスには深入りしません(出てくるのは org.w3c.dom.Document だけの予定)(記事一覧)。
org.w3c.dom.Document オブジェクトの取得方法
javax.xml.parsers パッケージ内の DOM 関連のクラスは DocumentBuilderFactory と DocumentBuilder です。 これらのクラスは org.w3c.dom.Document オブジェクトを取得するのに使います。 手順は以下の通り。 大まかな手順は SAXParserFactory, SAXParser の場合と同じです:
- DocumentBuilderFactory のインスタンスを取得する
- (必要なら)DocumentBuilderFactory の設定をする
- DocumentBuilder のインスタンスを取得する
- org.w3c.dom.Document オブジェクトを取得する
簡単なサンプルは次のようになります:
// 1. DocumentBuilderFactory のインスタンスを取得する。 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 2. DocumentBuilderFactory の設定をする。 factory.setNamespaceAware(true); // 3. DocumentBuilder のインスタンスを取得する。 DocumentBuilder builder = factory.newDocumentBuilder(); // 4. org.w3c.dom.Document オブジェクトを取得する。 // このサンプルでは "sample.xml" という XML 文書を解析している。 Document doc = builder.parse("sample.xml");
DocumentBuilder が解析できるクラス
DocumentBuilder を用いて org.w3c.dom.Document オブジェクトを生成するには DocumentBuilder#parse() メソッドを用いて XML 文書を解析する必要があります。 この parse() メソッドに渡せるオブジェクトの型は以下の4種があります:
- java.lang.String
- 文字列が指す名前のファイル(実際には URI として指すリソース)を読み込みます。
- java.io.File
- オブジェクトが表すファイルを読み込みます。
- java.io.InputStream
- オブジェクトが表す入力ストリーム(バイトストリーム)を読み込みます。 java.lang.String を第2引数にもつメソッドでは、その文字列をシステム識別子に設定します。
- org.xml.sax.InputSource
- オブジェクトが表す(XML 文書の)入力を読み込みます。 InputSource クラスについては以前の記事を参照のこと。
★内容が空の Document オブジェクトを生成する★
DocumentBuilder オブジェクトは、parse() メソッドを呼び出す以外にも、newDocument() メソッドによって内容が空の org.w3c.dom.Document オブジェクトを生成することができます:
// builder は DocumentBuilder のインスタンス
Document doc = builder.newDocument();
この org.w3c.dom.Document オブジェクトは、インスタンス生成後 DOM API を用いて内容を構築していく必要があります。