倭マン's BLOG

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

QName を使った SAX イベント・ハンドラ (1) : 概要

org.xml.sax.ContentHandler で要素に対する SAX イベントを扱うとき(つまり startElement() や endElement() を実装するとき)、引数に3つも文字列が定義されているので少々扱いにくくなっています。 また、属性を表すインターフェース org.xml.sax.Attributes を扱うときも、いくつかの文字列を合わせて使わなければいけない場合があります。

要素を扱う場合、この3つの文字列は順に 「名前空間 URI」「ローカル名」「QName」に対応する文字列が割り当てられます。 ところで、Java SE 5 からこれらを一纏めにしたようなクラス javax.xml.namespace.QName が導入されました。 今回から何回かにわたって、このクラスを用いてもう少し扱いやすいクラスを作成することを試みてみます(一覧)。

作成するクラス


今回は作成するクラスの概要のみを。 作成するインターフェース・クラスの名前は、拡張する型の名前に "J" をつけたものにしてあります:

作成クラス 拡張する型 役割 拡張する型からの変更
JContentHandler ContentHandler QName オブジェクトを使用した SAX イベント・ハンドラを表すインターフェース。 startElement(), endElement() メソッドのタグ名に関する引数が QName オブジェクトに纏められている。
JDefaultHandler DefaultHandler JContentHandler インターフェースの実装クラスを作成するためのサポートクラス。 startElement(), endElement() メソッドのデフォルト実装が定義されている。
JAttributes Attributes 1つの要素に付加されている属性群を扱うためのインターフェース。 JContentHandler#startElement() に渡される。 属性値などが QName オブジェクトを用いて取得できる。
JAttributesImpl AttributesImpl 属性の名前や値を変更したいときに用いるクラス。 属性値などが QName オブジェクトを用いて設定できる。

下図も参照のこと: