引き続きStAX。
次はCursor APIでXMLの書き出しをしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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(); } } } |
出力結果:
1 |
<?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 オブジェクトになる所です。
1 |
int eventCode = reader.next(); → XMLEvent event = reader.nextEvent(); |
詳細は省略;;
StAX はイテレータのようなインタフェースによって XML の読み書きを行います。
DOM のように大量のメモリを消費することなく、また、XMLドキュメントの内、使用するのは一部だけで他の部分は不要などという場合、パース処理をループで制御できる所が便利です。
とりあえず、StAXの簡単な使い方だけ勉強しました。
Java SE 7に向けて、少しずつ復習・予習をしていこうと思います。