倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

DocumentBuilderFactory, DocumentBuilder

前回までの 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 の場合と同じです:

  1. DocumentBuilderFactory のインスタンスを取得する
  2. (必要なら)DocumentBuilderFactory の設定をする
  3. DocumentBuilder のインスタンスを取得する
  4. 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 を用いて内容を構築していく必要があります。