| MAP | SASAX ドキュメント > チュートリアル > SASAX による解析 > 解析におけるフック | << | >> | 
本節では、 SASAX による XML 文書解析におけるユーティリティ機能について説明します。
本節でのトピックは:
ほぼ全ての "Elemenet" 実装の基底クラスである
"AbstractElement" は、
要素の内容が確定した際に起動される
"notifyDetermined(ParseContext)" メソッドを持っています。
例えば、
以下に示すようなコードで
notifyDetermined(ParseContext) をオーバライドすることで、
"composite"
要素の挙動を拡張することが出来ます。
CompositeElement compositeElement =
    new CompositeElement(null, uri, "composite"){
        protected void notifyDetermined(ParseContext context){
            // '</composite>' における処理を記述
        }
    };
notifyDetermined(ParseContext) のオーバライド
要素の開始/終了の通知を受け取るために、
SASAX は "Notification" インタフェースを提供しています。
public interface Notification
{
    public void elementStarted(Element element,
                               ParseContext context,
                               Attributes attributes)
        throws SAXException;
    public void elementEnded(Element element,
                             ParseContext context)
        throws SAXException;
}
Notification インタフェース
AbstractElement" は、
指定された Notification をイベント受信希望リストに登録する
"addNotification()" メソッドを持っています。
登録された Notification は、
対応する要素の開始/終了時に起動されます。
例えば、
以下のようなコードにより、
"composite" 要素の開始/終了を受け取ることが出来ます。
compositeElement.addNotification(new Notification(){
    public void elementStarted(Element element,
                               ParseContext context,
                               Attributes attributes)
        throws SAXException
    {
        // '<composite>' における処理をここに書く
    }
    public void elementEnded(Element element,
                             ParseContext context)
        throws SAXException
    {
        // '</composite>' における処理をここに書く
    }
});
Notification の登録
elementEnded() は
notifyDetermined(ParseContext)
の起動と同じ契機で起動されますので、
殆ど全ての実装は
Notification の
elementEnded() に置くことが出来ます。
注意: この節で説明されている機能は、SASAX 1.5 以降で利用可能です。
XML 文書中の開始タグにおいて記述される属性値は、
時には重要な役割を持つことがあります。
しかし、属性値を要素の開始より後で利用する場合
(例: Notification の elementEnded() からの利用)、
その値を保持し続ける必要があります。
AbstractElement は
watchAttribute() および
getAttribute() によって、
要素の開始より後での属性値へのアクセスを補助します。
watchAttribute() によって、
AbstractElement に属性値の監視と保持を行わせることが出来ます。
例えば:
compositeElement.watchAttribute("", "foo");
上記処理により、
XML 文書中の開始タグで(名前空間無しの)
"foo" 属性値が記述された場合、
compositeElement はその値を保持します。
XML 文書中の開始タグで記述された foo" の値は、
getAttribute() メソッドにより取得することが出来ます。
compositeElement.getAttribute("", "foo");
当該要素による解析(再開)の際に
clear() メソッドが実行されるまで
属性値が保持されます。
XML 文書中の開始タグで属性値が指定されていたとしても、
watchAttribute() を実施しない限りは、
属性値を取得することは出来ません。
| 開始タグでの値 | 監視 | |
|---|---|---|
| 監視有り | 監視無し | |
| 記述有り | 記述された値 | null | 
| 記述無し | null | 
null | 
本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
| 表記 | 完全名 | 
|---|---|
| AbstractElement | jp.ne.dti.lares.foozy.sasax.AbstractElement | 
| Element | jp.ne.dti.lares.foozy.sasax.Element | 
| Notification | jp.ne.dti.lares.foozy.sasax.Notification | 
| ParseContext | jp.ne.dti.lares.foozy.sasax.ParseContext | 
| MAP | SASAX ドキュメント > チュートリアル > SASAX による解析 > 解析におけるフック | << | >> |