引き続きStAX。
次はCursor APIでXMLの書き出しをしてみます。
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
public class StAXCursor2 {
public static void main(String[] arguments) {
try {
XMLOutputFactory factory = XMLOutputFactory.newInstance();
factory.setProperty("javax.xml.stream.isRepairingNamespaces", Boolean.TRUE);
XMLStreamWriter writer = factory.createXMLStreamWriter(System.out);
writer.writeStartDocument();
writer.writeStartElement("rt", "foo", "https://rest-term.com");
writer.writeAttribute("bar", "baz");
writer.writeCharacters("StAX Cursor API");
writer.writeEndElement();
writer.writeEndDocument();
writer.close();
} catch(XMLStreamException e) {
e.printStackTrace();
}
}
}
出力結果:
<?xml version="1.0" ?><rt:foo xmlns:rt="https://rest-term.com" bar="baz">StAX Cursor API</rt:foo>
XMLデータの書き出しに使用する XMLStreamWriter インタフェースのインスタンスを得るには、javax.xml.stream.XMLOutputFactory クラスの createXMLStreamWriter メソッドを使用します。XMLStreamWriter には名前空間の宣言をはじめ、DTD やコメントなど XML を構築するために必要なメソッドが含まれています。
処理手順は、まずXMLOutputFactoryインスタンスを取得。
factory.setProperty の部分では出力する XML に名前空間の宣言(「xmlns:rt=”https://rest-term.com”」)を含めるようにプロパティを設定。
createXMLStreamWriter メソッドで XMLStreamWriter インスタンスを作成したら、残りの部分では、作成した XMLStreamWriter のメソッド(writeStartDocument や writeAttribute など)で XML データを出力しています。
このようにしてStAXではXMLを書き出すことができます。
また、Event Iterator APIのCursor APIとの違いは、パースした要素は int 型のイベントタイプではなく javax.xml.stream.events.XMLEvent オブジェクトになる所です。
int eventCode = reader.next(); → XMLEvent event = reader.nextEvent();
詳細は省略;;
StAX はイテレータのようなインタフェースによって XML の読み書きを行います。
DOM のように大量のメモリを消費することなく、また、XMLドキュメントの内、使用するのは一部だけで他の部分は不要などという場合、パース処理をループで制御できる所が便利です。
とりあえず、StAXの簡単な使い方だけ勉強しました。
Java SE 7に向けて、少しずつ復習・予習をしていこうと思います。