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>' における処理を記述
}
};
要素の開始/終了の通知を受け取るために、
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; }
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>' における処理をここに書く } });
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 による解析 > 解析におけるフック | << | >> |