org.w3.dom.Documentをファイルに書き込む
1. 概要
XML処理の重要な部分は、他のユーザーが使用できるXMLファイルを作成することです。
JavaでXMLを処理する場合、エクスポートする必要のあるorg.w3c.dom.Document のインスタンスがよくあります。
このクイックチュートリアルでは、we’ll see how to write a Document to a file both in an in-line as well as a pretty-printed format。
2. トランスフォーマーの使用
Documentsをファイルに書き込むときの重労働はjavax.xml.transform.Transformer.です
2.1. トランスフォーマーの作成
それでは、TransformerFactoryを取得することから始めましょう。 このファクトリを使用してトランスフォーマーを作成します。
TransformerFactory transformerFactory = TransformerFactory.newInstance()
システムプロパティjavax.xml.transform.TransformerFactoryは、作成するファクトリ実装を指定します。 したがって、このプロパティは、TransformerFactory abstractクラスの具象サブクラスに名前を付けます。 But, if we don’t define this property, the transformer will simply use a platform default.
Java 9以降、TransformerFactory.newDefaultInstance()を使用して、組み込みのシステムデフォルト実装を作成できることに注意してください。
ファクトリができたので、Transformerを作成しましょう。
Transformer transformer = transformerFactory.newTransformer();
2.2. ソースと結果の指定
The Transformer transforms a source into a result.この場合、ソースはXMLドキュメントであり、結果は出力ファイルです。
まず、変換のソースを指定しましょう。 ここでは、Documentを使用してDOMソースを作成します。
DOMSource source = new DOMSource(document);
Note that the source doesn’t have to be the whole document. XMLが整形式である限り、ドキュメントのサブツリーを使用できます。
次に、トランスフォーマーが変換の結果を書き込む場所を指定します。
FileWriter writer = new FileWriter(new File(fileName));
StreamResult result = new StreamResult(writer);
ここでは、結果がファイルストリームであることをトランスフォーマーに伝えています。 But, we can use any kind of java.io.Writer or java.io.OutputStream to create the*StreamResult.* たとえば、StringWriter を使用してStringを作成し、ログに記録することができます。
2.3. XMLファイルの作成
最後に、トランスフォーマーにソースオブジェクトを操作し、結果オブジェクトに出力するように指示します。
transformer.transform(source, result);
これにより、最終的にXMLドキュメントの内容を含むファイルが作成されます。
3. 出力のカスタマイズ
さまざまな出力プロパティを指定することで、ファイルに書き込まれるXMLをカスタマイズできます. これらのいくつかを見てみましょう。
3.1. プリティ-出力の印刷
現在、デフォルトのトランスフォーマーはすべてを1行に書き込んでいるだけなので、読みやすくありません。 実際、XMLが大きければ、読むのはさらに難しくなります。
トランスフォーマーにOutputKeys.INDENTプロパティを設定することで、プリティプリント用にトランスフォーマーを構成できます。
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
ここでは、OutputKeys.INDENTとともに、indent-amountプロパティも指定していることに注意してください。 デフォルトではインデントはスペースなしなので、これは出力を正しくインデントします。
上記のプロパティを設定すると、はるかに優れた出力が得られます。
3.2. XML宣言の省略
時には、XML宣言を除外したい場合があります。
OutputKeys.OMIT_XML_DECLARATION propertyを設定することで、これを行うようにトランスフォーマーを構成できます。
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
そして再びトランスを使用すると、次のようになります。
3.3. その他の出力プロパティ
そのため、XML宣言をきれいに印刷して省略することとは別に、出力を他の方法でカスタマイズすることもできます。
-
OutputKeys.VERSION, を使用してXMLバージョンを指定できます。デフォルトは「1.0」です。
-
OutputKeys.ENCODINGを使用して、優先する文字エンコードを指定できます。デフォルトは「utf-8」です。
-
また、SYSTEM, PUBLIC, and STANDALONEなどの他の一般的な宣言属性を指定することもできます。
4. 結論
このチュートリアルでは、org.w3c.Document をファイルにエクスポートする方法と出力をカスタマイズする方法を説明しました。
そしてもちろん、付属のソースコードはover on GitHubで入手できます。