倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

XMLStreamWriter

XMLStreamWriter は XMLEvent を用いずに XML ノードを外部へ出力するクラスです。 XMLEventWriter の使用手順は以下の通り:

  1. XMLStreamWriter のインスタンスを取得する
  2. XMLStreamWriter のインスタンスを用いて XML ノードを書き出す
  3. XMLStreamWriter をフラッシュする
  4. XMLStreamWriter を閉じる

簡単なサンプルは次のようになります(XML ノードを書き出す対象は引数の java.io.Writer オブジェクト):

public void outputXmlDocument(Writer writer)throws XMLStreamException{
        
    XMLEventWriter eventWriter = null; 
    try{
        // 1. XMLStreamReader のインスタンスを取得する
        XMLOutputFactory factory = XMLOutputFactory.newInstance();
        streamWriter = factory.createXMLStreamWriter(writer);
            
        // 2.  XML ノードを書き出す
        streamWriter.writeStartDocument();
        streamWriter.writeStartElement("root");
        streamWriter.writeEndElement();
        streamWriter.writeEndDocument();

        // 3. XMLStreamWriter をフラッシュする
        streamWriter.flush();
            
    }finally{
        // 4. XMLStreamWriter を閉じる
        if(streamWriter != null)
            streamWriter.close();
    }
}

XML ノードの書き出し以外は XMLEventWriter の場合と殆ど同じですが、各ステップについて少し詳しく見ていきましょう。

XMLStreamWriter のインスタンスを取得する


XMLStreamWriter のインスタンスは、まず XMLOutputFactory のインスタンスを生成し、次いで XMLOutputFactory のメソッド XMLOutputFactory#createXMLStreamWriter() によって生成します。

XMLOutputFactory factory = XMLOutputFactory.newInstance();
XMLStreamWriter streamWriter = factory.createXMLStreamWriter(writer);

簡単には、次のようにもできます:

XMLStreamWriter streamWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(writer);

createXMLStreamWriter() メソッドに渡せるオブジェクトのうち、出力対象の XML 文書として指定できるものは次の3つです:

  • java.io.OutputStream
  • java.io.Writer
  • javax.xml.transform.Result

これらのオブジェクトに加えて、OutputStream の場合エンコーディングを指定する文字列も渡すことができます。

XML イベントを書き出す


XMLStreamWriter に定義されている各種 writeXxxx() メソッドを用いて、 XML ノードを書き出します。 詳しくは次回以降に。

XMLStreamWriter をフラッシュする・閉じる


XMLEventWriter と同じです。