目次へ

4.2. DOMImplementation

XML文書を生成するには、まず、Documentノードを取得する必要があります。DOM Level 2規格では、Documentノードを生成するインタフェースとして、DOMImplementationを提供しています。

メソッド 内容
public Document createDocument
(String namespaceURI,
String qualifiedName,
DocumentType doctype)
throws DOMException

指定された型の DOM Document オブジェクトの文書要素を作成します。

一つ目の引数には、名前空間を表すURIを記述します。二つ目の引数には、ルート要素の名前を指定します。3つ目には、Documentに指定するDocumentTypeオブジェクトを指定します。DocumentTypeはDTDを表すDOMインタフェースです。DocumentTypeについては、後ほど説明します。ところで、DOMではDOMImplementationを取得する方法を規定していません。DOMImplementationを取得する方法は、DOMパーサの実装依存になります。

以下、JavaでのDOMImplementation、Documentノード取得方法について説明します。まず、DocumentBuilderオブジェクトを取得します。18、19行目で、新しいDocumentBuilderオブジェクトのインスタンスを取得しています。次に、DocumentBuilderオブジェクトのgetDOMImplementation()メソッドを使用して、DOMImplementationを取得します(21行目)。さらに、DOMImplementationのcreateDocument()メソッドを使用して、Documentノードを取得しています。createDocumentメソッドの2番目の引数に、ルート要素の名前を指定します。ここでは、"root"と指定しています。createDocumentメソッドが実行された状態で、root要素ノードが作成されDocumentノードに付加されます。

  XMLのファイルへの出力ですが、DOMツリーをファイルに出力する方法を、DOMでは規定していません。よって、ファイル出力の方法に関しては、パーサ依存になります。ここでは、Java 1.4 付属のパーサ JAXP を使用した場合のファイル出力方法について、説明します。

 Java 1.4にはDOMツリーをXML文書に変換するクラス・メソッドが用意されています。javax.xml.transform.Transformerクラスのtransformメソッドを使用します。まず、24、25行目でTransformerクラスのインスタンスを取得しています。24行目でTransformerFactoryオブジェクトのnewInstance()メソッドを使用して、TransformerFactoryのインスタンスを取得しています。次にTransformerFactoryのnewTransformer()インスタンスメソッドを使用して、Transformerインスタンスを取得します。
 次に、DOMツリーをDOMSourceに変換します。27行目で、DOMSourceの新しいインスタンスを作成しています。コンストラクタの引数はdocumentノードです。これにより、documentノードをルートとするDOMツリーより、TransformerFactoryオブジェクトで変換可能なDOMSourceオブジェクトが生成されたことになります。
 最後に、DOMSourceをファイルに出力します。まず、出力先ファイルへのOutputStreamを取得します。28,29行目で、「newXML.xml」ファイルへのFileOutputStreamを取得しています。次に作成したOutputStreamを出力先とするStreamResultオブジェクトを作成します(30行目)。最後にTransformerオブジェクトのtransformメソッドを使用して、DOMSourceをXML文書に変換し、StreamResultに出力します。

(実習課題1)

XMLファイルを生成するプログラムを作成しなさい。

  • ルート要素の名前は、第一引数に指定する
  • 生成したXML文書は、標準出力に表示する

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp