パッケージ org.opengion.fukurou.xml

クラス HybsXMLHandler

  • すべての実装されたインタフェース:
    org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler

    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レコードずつ処理することが 可能です。
    バージョン
    4.0
    作成者
    Kazuhiko Hasegawa
    導入されたバージョン:
    JDK5.0,
    • フィールドの概要

      フィールド 
      修飾子とタイプ フィールド 説明
      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()
      デフォルトコンストラクター
    • メソッドの概要

      すべてのメソッド インスタンス・メソッド concreteメソッド 
      修飾子とタイプ メソッド 説明
      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<java.lang.String,​java.lang.String> 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)
      要素の開始通知を受け取ります。
      • クラスから継承されたメソッド org.xml.sax.helpers.DefaultHandler

        endDocument, endPrefixMapping, error, fatalError, ignorableWhitespace, notationDecl, processingInstruction, resolveEntity, setDocumentLocator, skippedEntity, startDocument, startPrefixMapping, unparsedEntityDecl, warning
      • クラスから継承されたメソッド java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • フィールドの詳細

      • ROWSET

        public static final java.lang.String ROWSET
        このハンドラのトップタグ名 "ROWSET"
        関連項目:
        定数フィールド値
      • ROWSET_TABLE

        public static final java.lang.String ROWSET_TABLE
        このハンドラで取り扱える ROWSETタグの属性
        関連項目:
        定数フィールド値
      • ROW

        public static final java.lang.String ROW
        このハンドラで取り扱えるタグ名 "ROW"
        関連項目:
        定数フィールド値
      • ROW_NUM

        public static final java.lang.String ROW_NUM
        このハンドラで取り扱える ROWタグの属性 "num"
        関連項目:
        定数フィールド値
      • EXEC_SQL

        public static final java.lang.String EXEC_SQL
        このハンドラで取り扱えるタグ名 "EXEC_SQL"
        関連項目:
        定数フィールド値
      • MERGE_SQL

        public static final java.lang.String MERGE_SQL
        このハンドラで取り扱えるタグ名 "MERGE_SQL"
        関連項目:
        定数フィールド値
    • コンストラクタの詳細

      • HybsXMLHandler

        public HybsXMLHandler()
        デフォルトコンストラクター
        変更履歴:
        6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
    • メソッドの詳細

      • parse

        public void parse​(java.io.Reader reader)
        パース処理を行います。 通常のパース処理の簡易メソッドになっています。
        パラメータ:
        reader - パース処理用のReaderオブジェクト
      • setTagElementListener

        public void setTagElementListener​(TagElementListener listener)
        内部に TagElementListener を登録します。 これは、<ROW> タグの endElement 処理毎に呼び出されます。 つまり、行データを取得都度、TagElement オブジェクトを作成し、 この TagElementListener の action( TagElement ) メソッドを呼び出します。 何もセットしない、または、null がセットされた場合は、何もしません。
        パラメータ:
        listener - TagElementListenerオブジェクト
      • setDefaultMap

        public void setDefaultMap​(java.util.Map<java.lang.String,​java.lang.String> map)
        TagElement オブジェクトを作成する時の 初期カラム/値を設定します。 TagElements オブジェクトは、XMLファイルより作成する為、項目(カラム)も XMLファイルのROW属性に持っている項目と値で作成されます。 このカラム名を、外部から初期設定することが可能です。 その場合、ここで登録したカラム順(Mapに、LinkedHashMap を使用した場合) が保持されます。また、ROW属性に存在しないカラムがあれば、値とともに 初期値として設定しておくことが可能です。 なお、ここでのMapは、直接設定していますので、ご注意ください。
        パラメータ:
        map - 初期カラムマップ
      • characters

        public void characters​(char[] buffer,
                               int start,
                               int length)
                        throws org.xml.sax.SAXException
        要素内の文字データの通知を受け取ります。 インタフェース ContentHandler 内の characters メソッドをオーバーライドしています。 各文字データチャンクに対して特殊なアクション (ノードまたはバッファへのデータの追加、 データのファイルへの出力など) を実行することができます。
        定義:
        characters インタフェース内 org.xml.sax.ContentHandler
        オーバーライド:
        characters クラス内 org.xml.sax.helpers.DefaultHandler
        パラメータ:
        buffer - 文字データ配列
        start - 配列内の開始位置
        length - 配列から読み取られる文字数
        例外:
        org.xml.sax.SAXException
        関連項目:
        DefaultHandler.characters(char[] , int , int )
      • startElement

        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
        要素の開始通知を受け取ります。 インタフェース ContentHandler 内の startElement メソッドをオーバーライドしています。 パーサは XML 文書内の各要素の前でこのメソッドを呼び出します。 各 startElement イベントには対応する endElement イベントがあります。 これは、要素が空である場合も変わりません。対応する endElement イベントの前に、 要素のコンテンツ全部が順番に報告されます。 ここでは、タグがレベル3以上の場合は、上位タグの内容として取り扱います。よって、 タグに名前空間が定義されている場合、その属性は削除します。
        定義:
        startElement インタフェース内 org.xml.sax.ContentHandler
        オーバーライド:
        startElement クラス内 org.xml.sax.helpers.DefaultHandler
        パラメータ:
        namespace - 名前空間 URI
        localName - 前置修飾子を含まないローカル名。名前空間処理が行われない場合は空文字列
        qname - 前置修飾子を持つ修飾名。修飾名を使用できない場合は空文字列
        attributes - 要素に付加された属性。属性が存在しない場合、空の Attributesオブジェクト
        例外:
        org.xml.sax.SAXException
        関連項目:
        DefaultHandler.startElement(String , String , String , Attributes )
      • endElement

        public void endElement​(java.lang.String namespace,
                               java.lang.String localName,
                               java.lang.String qname)
                        throws org.xml.sax.SAXException
        要素の終了通知を受け取ります。 インタフェース ContentHandler 内の endElement メソッドをオーバーライドしています。 SAX パーサは、XML 文書内の各要素の終わりにこのメソッドを呼び出します。 各 endElement イベントには対応する startElement イベントがあります。 これは、要素が空である場合も変わりません。
        定義:
        endElement インタフェース内 org.xml.sax.ContentHandler
        オーバーライド:
        endElement クラス内 org.xml.sax.helpers.DefaultHandler
        パラメータ:
        namespace - 名前空間 URI
        localName - 前置修飾子を含まないローカル名。名前空間処理が行われない場合は空文字列
        qname - 前置修飾子を持つ XML 1.0 修飾名。修飾名を使用できない場合は空文字列
        例外:
        org.xml.sax.SAXException
        関連項目:
        DefaultHandler.endElement(String , String , String )
        変更履歴:
        6.4.3.2 (2016/02/19) findBugs. element は、コンストラクタで初期化されません。, 6.9.9.0 (2018/08/20) body の最後の処理の修正。