倭マン's BLOG

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

QName を使った SAX イベント・ハンドラ (2) : インターフェース

今回は、前回示したクラス群の中の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() にしてます。