public class HybsXMLHandler extends 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 String |
EXEC_SQL
このハンドラで取り扱えるタグ名 "EXEC_SQL"
|
static String |
MERGE_SQL
このハンドラで取り扱えるタグ名 "MERGE_SQL"
|
static String |
ROW
このハンドラで取り扱えるタグ名 "ROW"
|
static String |
ROW_NUM
このハンドラで取り扱える ROWタグの属性 "num"
|
static String |
ROWSET
このハンドラのトップタグ名 "ROWSET"
|
static String |
ROWSET_TABLE
このハンドラで取り扱える ROWSETタグの属性
|
| コンストラクタと説明 |
|---|
HybsXMLHandler()
デフォルトコンストラクター
|
| 修飾子とタイプ | メソッドと説明 |
|---|---|
void |
characters(char[] buffer,
int start,
int length)
要素内の文字データの通知を受け取ります。
|
void |
endElement(String namespace,
String localName,
String qname)
要素の終了通知を受け取ります。
|
void |
parse(Reader reader)
パース処理を行います。
|
void |
setDefaultMap(Map map)
TagElement オブジェクトを作成する時の 初期カラム/値を設定します。
|
void |
setTagElementListener(TagElementListener listener)
内部に TagElementListener を登録します。
|
void |
startElement(String namespace,
String localName,
String qname,
Attributes attributes)
要素の開始通知を受け取ります。
|
endDocument, endPrefixMapping, error, fatalError, ignorableWhitespace, notationDecl, processingInstruction, resolveEntity, setDocumentLocator, skippedEntity, startDocument, startPrefixMapping, unparsedEntityDecl, warningpublic HybsXMLHandler()
| 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. |
public void parse(Reader reader)
reader - パース処理用のReaderオブジェクトpublic void setTagElementListener(TagElementListener listener)
listener - TagElementListenerオブジェクトpublic void setDefaultMap(Map map)
map - 初期カラムマップpublic void characters(char[] buffer,
int start,
int length)
throws SAXException
characters インタフェース内 ContentHandlercharacters クラス内 DefaultHandlerbuffer - 文字データ配列start - 配列内の開始位置length - 配列から読み取られる文字数SAXExceptionDefaultHandler.characters(char[] , int , int )public void startElement(String namespace, String localName, String qname, Attributes attributes) throws SAXException
startElement インタフェース内 ContentHandlerstartElement クラス内 DefaultHandlernamespace - 名前空間 URIlocalName - 前置修飾子を含まないローカル名。名前空間処理が行われない場合は空文字列qname - 前置修飾子を持つ修飾名。修飾名を使用できない場合は空文字列attributes - 要素に付加された属性。属性が存在しない場合、空の AttributesオブジェクトSAXExceptionDefaultHandler.startElement(String , String , String , Attributes )public void endElement(String namespace, String localName, String qname) throws SAXException
endElement インタフェース内 ContentHandlerendElement クラス内 DefaultHandlernamespace - 名前空間 URIlocalName - 前置修飾子を含まないローカル名。名前空間処理が行われない場合は空文字列qname - 前置修飾子を持つ XML 1.0 修飾名。修飾名を使用できない場合は空文字列SAXExceptionDefaultHandler.endElement(String , String , String )| 6.4.3.2 (2016/02/19) findBugs. element は、コンストラクタで初期化されません。 |
Webアプリケーションフレームワーク openGionCopyright (c) 2009 The openGion Project.