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]から入手できます。