XMLEventWriter は XMLEvent を外部へ出力するクラスです。 XMLEventWriter の使用方法は以下のような手順で行います:
- XMLEventWriter のインスタンスを取得する
- XMLEventWriter のインスタンスを用いて XML イベントを書き出す
- XMLEventWriter をフラッシュする
- XMLEventWriter を閉じる
簡単なサンプルは次のようになります(第1引数の javax.xml.stream.XMLEventWriter オブジェクトから XML イベントを読み込み、それを第2引数の java.io.Writer オブジェクトへ書き出します):
public void outputEvents(XMLEventReader reader, Writer writer) throws XMLStreamException{ XMLEventWriter eventWriter = null; try{ // 1. XMLStreamReader のインスタンスを取得する XMLOutputFactory factory = XMLOutputFactory.newInstance(); eventWriter = factory.createXMLEventWriter(writer); while(reader.hasNext()){ XMLEvent event = reader.nextEvent(); // 2. XML イベントを書き出す eventWriter.add(event); } // 3. XMLEventWriter をフラッシュする eventWriter.flush(); }finally{ // 4. XMLEventWriter を閉じる if(eventWriter != null) eventWriter.close(); } }
各ステップについて少し詳しく見ていきましょう。
XMLEventWriter のインスタンスを取得する
XMLEventWriter のインスタンスは、まず XMLOutputFactory のインスタンスを生成し、次いで XMLOutputFactory のメソッド XMLOutputFactory#createXMLEventWriter() によって生成します。
XMLOutputFactory factory = XMLOutputFactory.newInstance(); XMLEventWriter eventWriter = factory.createXMLEventWriter(writer);
簡単には、次のようにもできます:
XMLEventWriter eventWriter = XMLOutputFactory.newInstance().createXMLEventWriter(writer);
createXMLEventWriter() メソッドに渡せるオブジェクトのうち、出力対象の XML 文書として指定できるものは次の3つです:
これらのオブジェクトに加えて、OutputStream の場合にはエンコーディングを指定する文字列も渡すことができます。
XML イベントを書き出す
イベントを書き出すには次の2つのメソッドを使います:
- add(XMLEvent)
- add(XMLEventReader)
add(XMLEventReader) メソッドは、引数の XMLEventReader から XMLEvent オブジェクトを列挙して add(XMLEvent) メソッドを呼び出すと思って良いでしょう。 add(XMLEvent) メソッドは、java.io.OutputStream や java.io.Writer から XMLEventWriter を生成した場合には、引数の XML イベントを通常のテキストの XML 文書(の断片)として書き出します。
XMLEventWriter をフラッシュする
java.io.OutputStream, java.io.Writer のように、XMLEventWriter でも書き出し後に flush() メソッドを呼び出す必要があります。
XMLEventWriter を閉じる
flush() メソッド同様、java.io.OutputStream, java.io.Writer のように XMLEventWriter も読み込みが終了した時点で関連するリソースを解放するために close() メソッドを呼び出す必要があります。 これらは例外が発生してもキチンと呼び出されるように、finally 節で呼び出しましょう。