- 4.1. XML文書を作成する
- 4.2. DOMImplementation
- 4.3. 要素、テキストの付加
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文書は、標準出力に表示する