1. 概要

XML処理の重要な部分は、他のユーザーが使用できるXMLファイルを作成することです。

JavaでXMLを処理する場合、エクスポートする必要のあるorg.w3c.dom.Documentのインスタンスがよくあります。

このクイックチュートリアルでは、インライン形式ときれいに印刷された形式の両方でドキュメントをファイルに書き込む方法を説明します。

2. 変圧器の使用

Document をファイルに書き込むときの重労働は、javax.xml.transform.Transformer。です。

2.1. トランスフォーマーの作成

それでは、TransformationrFactoryを入手することから始めましょう。 このファクトリを使用してトランスフォーマーを作成します。

TransformerFactory transformerFactory = TransformerFactory.newInstance()

システムプロパティjavax.xml.transform.TransformerFactoryは、作成するファクトリ実装を指定します。 したがって、このプロパティは、 TransformerFactoryabstractクラスの具象サブクラスに名前を付けます。 ただし、このプロパティを定義しない場合、トランスフォーマーは単にプラットフォームのデフォルトを使用します。

Java 9以降、TransformerFactory。 newDefaultInstance()を使用して、組み込みのシステムデフォルト実装を作成できることに注意してください。

ファクトリができたので、トランスフォーマーを作成しましょう。

Transformer transformer = transformerFactory.newTransformer();

2.2. ソースと結果の指定

Transformerはソースを結果に変換します。この場合、ソースはXMLドキュメントであり、結果は出力ファイルです。

まず、変換のソースを指定しましょう。 ここでは、Documentを使用してDOMソースを作成します。

DOMSource source = new DOMSource(document);

ソースがドキュメント全体である必要はないことに注意してください。XMLが整形式である限り、ドキュメントのサブツリーを使用できます。

次に、トランスフォーマーが変換の結果を書き込む場所を指定します。

FileWriter writer = new FileWriter(new File(fileName));
StreamResult result = new StreamResult(writer);

ここでは、結果がファイルストリームであることをトランスフォーマーに伝えています。 ただし、任意の種類のjava.io.Writerまたはjava.io.OutputStreamを使用して、 StreamResult。 たとえば、 StringWriter 構築するその後、ログに記録できます。

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. きれい-出力を印刷する

現在、デフォルトのトランスフォーマーはすべてを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 プロパティを設定することで、これを行うようにトランスフォーマーを構成できます。

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バージョンを指定できます。デフォルトは、「1.0」です。
  • OutputKeys.ENCODING を使用して、優先する文字エンコードを指定できます。デフォルトは「utf-8」です。
  • また、 SYSTEM、PUBLIC、STANDALONEなどの他の一般的な宣言属性を指定することもできます。

4. 結論

このチュートリアルでは、org.w3c.Documentをファイルにエクスポートする方法と出力をカスタマイズする方法を説明しました。

そしてもちろん、付属のソースコードはGitHubからで入手できます。