org.w3.dom.Documentをファイルに書き込む
1概要
XML処理の重要な部分は、他の人が使用できるXMLファイルを作成することです。
JavaでXMLを扱うとき、私たちはしばしば
__https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/Document.html[org.w3c.dom.Document]のインスタンスを持つでしょう。
__輸出する必要があります。
このクイックチュートリアルでは、
Document
をファイルにインラインでも、きれいに印刷された形式でも書き込む方法を説明します。
2トランスフォーマーを使う
__Document
sをファイルに書き込むときの大きな負担は
javax.xml.transform.Transformer.__です。
2.1. トランスフォーマーの作成
それでは、
TransformerFactory
を取得することから始めましょう。このファクトリを使ってトランスフォーマを作成します。
TransformerFactory transformerFactory = TransformerFactory.newInstance()
システムプロパティ
javax.xml.transform.TransformerFactory
は、作成するファクトリ実装を指定します。したがって、このプロパティは
__TransformerFactory
__abstractクラスの具象サブクラスを指定します。
ただし、このプロパティを定義しないと、トランスフォーマは単純にプラットフォームのデフォルトを使用します。
-
Java 9以降、
TransformerFactory.
)を使用して組み込みのシステムデフォルト実装を作成できます。
これでファクトリーが完成しました。次に
Transformer
を作成しましょう。
Transformer transformer = transformerFactory.newTransformer();
2.2. ソースと結果の指定
-
Transformer
は、ソースを結果に変換します。** この場合、ソースはXMLドキュメントであり、結果は出力ファイルです。
まず、変換元を指定しましょう。ここでは、
Document
を使用してDOMソースを構築します。
DOMSource source = new DOMSource(document);
ソースがドキュメント全体である必要はないことに注意してください。
次に、トランスフォーマが変換の結果を書き込む場所を指定します。
FileWriter writer = new FileWriter(new File(fileName));
StreamResult result = new StreamResult(writer);
ここでは、結果がファイルストリームであることをトランスフォーマに伝えています。
-
しかし、任意の種類の
java.io.Writer
または
java.io.OutputStream
を使用して
__
StreamResultを作成することができます。**
たとえば、
StringWriter
を使用して記録できる
String__を作成できます。
2.3. XMLファイルの作成
最後に、トランスフォーマにソースオブジェクトを操作して結果オブジェクトに出力するように指示します。
transformer.transform(source, result);
-
これでXML文書の内容を含むファイルがついに作成されます。
<?xml version="1.0" encoding="UTF-8" standalone="no"?><Company><Department name="Sales">
<Employee name="John Smith"/><Employee name="Tim Dellor"/></Department></Company>
3出力をカスタマイズする
さまざまな出力プロパティを指定することで、ファイルに書き込まれるXMLをカスタマイズできます。これらのいくつかを調べてみましょう。
3.1. 出力をきれいに印刷する
現在、私たちのデフォルトのトランスフォーマーは、すべてを単一行に書いていましたが、これは読むのが楽しくありません。確かに、XMLが大きいと読むのがさらに難しくなります。
トランスフォーマの
OutputKeys.INDENT
プロパティを設定することで、トランスフォーマをきれいに印刷するように設定できます。
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
OutputKeys.INDENT
と共に、ここでは
indent-amount
プロパティも指定しています。デフォルトではインデントはゼロスペースなので、これは出力を正しくインデントします。
上記のプロパティを設定すると、はるかに良い出力が得られます。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Company>
<Department name="Sales">
<Employee name="John Smith"/>
<Employee name="Tim Dellor"/>
</Department>
</Company>
3.2. XML宣言を省略する
時には、XML宣言を除外したい場合があります。
__OutputKeys.OMIT
XML
DECLARATION
__propertyを設定することで、これを行うようにトランスフォーマーを構成できます。
transformer.setOutputProperty(OutputKeys.OMIT__XML__DECLARATION, "yes");
そして再びトランスを使うと、次のようになります。
<Company>
<Department name="Sales">
<Employee name="John Smith"/>
<Employee name="Tim Dellor"/>
</Department>
</Company>
** 3.3. その他の出力プロパティ
したがって、見栄えのよい印刷とXML宣言の省略とは別に、他の方法で出力をカスタマイズすることもできます。
-
__OutputKeys.VERSIONを使用してXMLのバージョンを指定できます、
__the
デフォルトは「1.0」です
** 私たちは自分の好みの文字エンコーディングを示すことができます
OutputKeys.ENCODING
を使用した場合、デフォルトは“ utf-8”です。
** そして、他の典型的な宣言属性も指定できます
4結論
このチュートリアルでは、
__org.w3c.Document
__をファイルにエクスポートする方法と出力をカスタマイズする方法について説明しました。
そしてもちろん、付随するソースコードはhttps://github.com/eugenp/tutorials/tree/master/xml[over GitHub]から入手できます。