倭マン's BLOG

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

StAX での XML イベント

今回は XML 文書を(イベント・ベースで)解析する際などに使用する「XML イベント」のサブタイプを見ていきます。

XML イベントを表す型は javax.xml.stream.events.XMLEvent です。 全ての XML イベントはこのインターフェースを拡張しています。 具体的にサブインターフェースを列挙すると次のようになります:

  • StartDocument
  • EndDocument
  • StartElement
  • EndElement
  • Namespace
  • Attribute
  • Characters
  • Comment
  • ProcessingInstruction
  • EntityReference
  • DTD
  • EntityDeclaration
  • NotationDeclaration

これらはすべて javax.xml.stream.events パッケージ内のインターフェースです。

以下で、各インターフェースに定義されている getter メソッドを見ていきましょう。 ただし

  • EntityReference
  • EntityDeclaration
  • DTD
  • NotationDeclaration

は省略します。

StartDocument


XML 文書の開始を通知する XML イベントです。

getter メソッド 説明
getSystemId() String この XML 文書のシステム識別子(ファイルの場合はファイルへのパスなど)を返します。
getVersion() String この XML 文書のバージョンを返します。 デフォルト値は "1.0" です。
getCharacterEncodingScheme() String この XML 文書のエンコーディングを返します。 デフォルト値は "UTF-8" です。
encodingSet() boolean この XML 文書にエンコーディングが宣言されているかを返します。

isStandalone(), standaloneSet() は省略。

EndDocument


XML 文書の終了を通知する XML イベントです。 固有の getter メソッドは定義されていません。

StartElement


要素の開始を通知する XML イベントです。

getter メソッド 説明
getName() QName この要素の名前を javax.xml.namespace.QName オブジェクトとして返します。
getAttributeByName(QName) Attribute この要素に付加されている属性を、引数の QName をキーにして取得します。
getAttributes() java.util.Iterator この要素に付加されている属性を Iterator として返します。
getNamespaceURI(String) String 引数の名前空間接頭辞に関連づけられている名前空間 URI を返します。
getNamspaces() java.util.Iterator この要素に付加されている名前空間宣言を Iterator として返します。
getNamespaceContext() NamespaceContext この要素の名前空間コンテキスト*1を返します。

EndElement


要素の終了を通知する XML イベントです。

getter メソッド 説明
getName() QName この要素の名前を javax.xml.namespace.QName オブジェクトとして返します。
getNamespeces() java.util.Iterator この終了タグでスコープから外れる名前空間宣言群を Iterator として返します。

Namespace


名前空間宣言を通知する XML イベントです。 この XML イベントは通常の XML 文書の解析では報告されません(StartElement イベントから取得します)。 XPath 式の評価結果(検索結果)などで報告される可能性があります。

getter メソッド 説明
getPrefix() String この名前空間宣言の名前空間接頭辞を返します。
getNamespaceURI() String この名前空間宣言の名前空間 URI を返します。
isDefaultNamespaceDeclaration() boolean この名前空間宣言がデフォルト名前空間宣言かどうかを返します。

Attribute


属性を通知する XML イベントです。 この XML イベントも Namespace イベント同様、通常の XML 文書の解析では報告されません(StartElement イベントから取得します)。 XPath 式の評価結果(検索結果)などで報告される可能性があります。

getter メソッド 説明
getName() QName この属性の名前を javax.xml.namespace.QName オブジェクトとして返します。
getValue() String この属性の属性値を返します。
getDTDType() String この属性の属性値の(DTD での)型を返します。 デフォルト値は "CDATA" です。
isSpecified() boolean この属性が文書中に記述されているか、スキーマ定義等によってデフォルト値を補われたものかを返します。

Characters


文字情報を通知する XML イベントです。 テキスト、CDATA セクション、無視可能な空白が含まれます。

getter メソッド 説明
getData() String 文字データの内容を返します。
isWhiteSpace() boolean この文字データが空白文字のみからできているかどうかを返します。
isCData() boolean この文字データが CDATA セクションかどうかを返します。
isIgnorableWhiteSpace() boolean この文字データが無視できる空白*2かどうかを返します。

Comment


コメントを通知する XML イベントです。

getter メソッド 説明
getText() String このコメントの内容を返します。

ProcessingInstruction


処理命令を通知する XML イベントです。」という処理命令に対して、ターゲットとは「xml-stylesheet」、データとは「type="text/xsl" href="stylesheet.xsl"」のことです。">*3

getter メソッド 説明
getTarget() String この処理命令のターゲットを返します。
getData() String この処理命令のデータを返します。

*1:以前の記事を参照。

*2:「無視できる空白」かどうかは DTD などのスキーマ定義がセットされていないと正確には判断できません。

*3:「<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>」という処理命令に対して、ターゲットとは「xml-stylesheet」、データとは「type="text/xsl" href="stylesheet.xsl"」のことです。