今回は、前回示したクラス群の中の2つのインターフェース JContentHandler, JAttributes を作成します。
JContentHandler インターフェース
JContentHandler は org.xml.sax.ContentHandler を拡張して作成します。 また、JContentHandler には、javax.xml.namespace.QName を引数にとる startElement(..), endElement(..) メソッドを定義します。 startElement() メソッドには属性を纏めて扱うオブジェクトも渡す必要がありますが、これは次節で扱う JAttributes を指定します:
import javax.xml.namespace.QName; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; public interface JContentHandler extends ContentHandler { void startElement(QName qname, JAttributes atts) throws SAXException; void endElement(QName qname) throws SAXException; }
ContentHandler の startElement(), endElement() に比べてかなり使いやすそうじゃありませんか?
JAttributes インターフェース
JAttributes は org.xml.sax.Attributes を拡張して作成します。 新たに定義するメソッドは QName を用いて属性値などを取得するメソッドです:
import javax.xml.namespace.QName; import org.xml.sax.Attributes; public interface JAttributes extends Attributes{ int getIndex(QName qname); QName getQualifiedName(int index); String getType(QName qname); String getValue(QName qname); }
QName を取得するメソッドは getQName() にしたいところですが、String オブジェクトを返す同名のメソッドが定義されているので、少し長い名前 getQualifiedName() にしてます。