public class HybsXMLHandler
extends org.xml.sax.helpers.DefaultHandler
このクラスは、拡張オラクル XDK形式のXMLファイルを処理するハンドラです。
オラクルXDK形式のXMLとは、下記のような ROWSET をトップとする ROW の
集まりで1レコードを表し、各ROWには、カラム名をキーとするXMLになっています。
<ROWSET>
<ROW num="1">
<カラム1>値1</カラム1>
・・・
<カラムn>値n</カラムn>
</ROW>
・・・
<ROW num="n">
・・・
</ROW>
<ROWSET>
この形式であれば、XDK(Oracle XML Developer's Kit)を利用すれば、非常に簡単に
データベースとXMLファイルとの交換が可能です。
XDK(Oracle XML Developer's Kit)
拡張XDK形式とは、ROW 以外に、SQL処理用タグ(EXEC_SQL)を持つ XML ファイルです。
また、登録するテーブル(table)を ROWSETタグの属性情報として付与することができます。
(大文字小文字に注意)
これは、オラクルXDKで処理する場合、無視されますので、同様に扱うことが出来ます。
この、EXEC_SQL は、それそれの XMLデータをデータベースに登録する際に、
SQL処理を自動的に流す為の、SQL文を記載します。
この処理は、イベント毎に実行される為、その配置順は重要です。
このタグは、複数記述することも出来ますが、BODY部には、1つのSQL文のみ記述します。
<ROWSET tableName="XX" >
<EXEC_SQL> 最初に記載して、初期処理(データクリア等)を実行させる。
delete from GEXX where YYYYY
</EXEC_SQL>
<MERGE_SQL> このSQL文で UPDATEして、結果が0件ならINSERTを行います。
update GEXX set AA=[AA] , BB=[BB] where CC=[CC]
</MERGE_SQL>
<ROW num="1">
<カラム1>値1</カラム1>
・・・
<カラムn>値n</カラムn>
</ROW>
・・・
<ROW num="n">
・・・
</ROW>
<EXEC_SQL> 最後に記載して、項目の設定(整合性登録)を行う。
update GEXX set AA='XX' , BB='YY' where CC='ZZ'
</EXEC_SQL>
<ROWSET>
DefaultHandler クラスを拡張している為、通常の処理と同様に、使用できます。
InputSource input = new InputSource( reader );
HybsXMLHandler hndler = new HybsXMLHandler();
SAXParserFactory f = SAXParserFactory.newInstance();
SAXParser parser = f.newSAXParser();
parser.parse( input,hndler );
また、上記の処理そのものを簡略化したメソッド:parse( Reader ) を持っているため、
通常そのメソッドを使用します。
HybsXMLHandler には、TagElementListener をセットすることができます。
これは、ROW 毎に 内部情報を TagElement オブジェクト化し、action( TagElement )
が呼び出されます。この Listener を介して、1レコードずつ処理することが
可能です。| 修飾子とタイプ | フィールドと説明 |
|---|---|
static java.lang.String |
EXEC_SQL
このハンドラで取り扱えるタグ名 "EXEC_SQL"
|
static java.lang.String |
MERGE_SQL
このハンドラで取り扱えるタグ名 "MERGE_SQL"
|
static java.lang.String |
ROW
このハンドラで取り扱えるタグ名 "ROW"
|
static java.lang.String |
ROW_NUM
このハンドラで取り扱える ROWタグの属性 "num"
|
static java.lang.String |
ROWSET
このハンドラのトップタグ名 "ROWSET"
|
static java.lang.String |
ROWSET_TABLE
このハンドラで取り扱える ROWSETタグの属性
|
| コンストラクタと説明 |
|---|
HybsXMLHandler()
デフォルトコンストラクター
|
| 修飾子とタイプ | メソッドと説明 |
|---|---|
void |
characters(char[] buffer,
int start,
int length)
要素内の文字データの通知を受け取ります。
|
void |
endElement(java.lang.String namespace,
java.lang.String localName,
java.lang.String qname)
要素の終了通知を受け取ります。
|
void |
parse(java.io.Reader reader)
パース処理を行います。
|
void |
setDefaultMap(java.util.Map map)
TagElement オブジェクトを作成する時の 初期カラム/値を設定します。
|
void |
setTagElementListener(TagElementListener listener)
内部に TagElementListener を登録します。
|
void |
startElement(java.lang.String namespace,
java.lang.String localName,
java.lang.String qname,
org.xml.sax.Attributes attributes)
要素の開始通知を受け取ります。
|
public static final java.lang.String ROWSET
public static final java.lang.String ROWSET_TABLE
public static final java.lang.String ROW
public static final java.lang.String ROW_NUM
public static final java.lang.String EXEC_SQL
public static final java.lang.String MERGE_SQL
public HybsXMLHandler()
public void parse(java.io.Reader reader)
reader - パース処理用のReaderオブジェクトpublic void setTagElementListener(TagElementListener listener)
listener - TagElementListenerオブジェクトpublic void setDefaultMap(java.util.Map map)
map - 初期カラムマップpublic void characters(char[] buffer,
int start,
int length)
throws org.xml.sax.SAXException
characters インタフェース内 org.xml.sax.ContentHandlercharacters クラス内 org.xml.sax.helpers.DefaultHandlerbuffer - 文字データ配列start - 配列内の開始位置length - 配列から読み取られる文字数org.xml.sax.SAXExceptionDefaultHandler.characters(char[] , int , int )public void startElement(java.lang.String namespace,
java.lang.String localName,
java.lang.String qname,
org.xml.sax.Attributes attributes)
throws org.xml.sax.SAXException
startElement インタフェース内 org.xml.sax.ContentHandlerstartElement クラス内 org.xml.sax.helpers.DefaultHandlernamespace - 名前空間 URIlocalName - 前置修飾子を含まないローカル名。名前空間処理が行われない場合は空文字列qname - 前置修飾子を持つ修飾名。修飾名を使用できない場合は空文字列attributes - 要素に付加された属性。属性が存在しない場合、空の Attributesオブジェクトorg.xml.sax.SAXExceptionDefaultHandler.startElement(String , String , String , Attributes )public void endElement(java.lang.String namespace,
java.lang.String localName,
java.lang.String qname)
throws org.xml.sax.SAXException
endElement インタフェース内 org.xml.sax.ContentHandlerendElement クラス内 org.xml.sax.helpers.DefaultHandlernamespace - 名前空間 URIlocalName - 前置修飾子を含まないローカル名。名前空間処理が行われない場合は空文字列qname - 前置修飾子を持つ XML 1.0 修飾名。修飾名を使用できない場合は空文字列org.xml.sax.SAXExceptionDefaultHandler.endElement(String , String , String )Webアプリケーションフレームワーク openGionCopyright (c) 2009 The openGion Project.