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

クラス JspSaxParser

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

    public class JspSaxParser
    extends org.xml.sax.ext.DefaultHandler2
    JSP/XMLファイルを読み取って、OGNode/OGElement オブジェクトを取得する、パーサークラスです。 自分自身が、DefaultHandler2 を拡張していますので、パーサー本体になります。 javax.xml.parsers および、org.w3c.dom の簡易処理を行います。 read で、トップレベルの OGNode を読み込み、write で、ファイルに書き出します。 通常の W3C 系の オブジェクトを利用しないのは、属性の並び順を保障するためです。 ただし、属性のタブ、改行は失われます。 また、属性値に含まれるCR(復帰), LF(改行), TAB(タブ)は、 半角スペースに置き換えられます。 これは、SAXParser 側での XML の仕様の関係で、属性は、正規化されるためです。
    変更履歴:
    5.1.8.0 (2010/07/01) 新規作成, 5.1.9.0 (2010/08/01) static メソッドを廃止。通常のオブジェクトクラスとして扱います。
    バージョン
    5.0
    作成者
    Kazuhiko Hasegawa
    導入されたバージョン:
    JDK6.0,
    • コンストラクタの概要

      コンストラクタ 
      コンストラクタ 説明
      JspSaxParser()  
    • メソッドの概要

      すべてのメソッド staticメソッド インスタンス・メソッド concreteメソッド 
      修飾子とタイプ メソッド 説明
      void addFilter​(JspParserFilter filter)
      copyDirectry 処理で、OGDocument をフィルター処理するオブジェクトを登録します。
      void characters​(char[] cbuf, int off, int len)
      要素内の文字データの通知を受け取ります。
      void comment​(char[] cbuf, int off, int len)
      文書内の任意の位置にある XML コメントを報告します。
      void copyDirectry​(java.io.File fromFile, java.io.File toFile)
      ディレクトリの再帰処理でパース処理を行います。
      void endCDATA()
      CDATA セクションの終わりを報告します。
      void endDTD()
      DTD 宣言の終わりを報告します。
      void endElement​(java.lang.String uri, java.lang.String localName, java.lang.String qName)
      要素の終了通知を受け取ります。
      void endEntity​(java.lang.String name)
      エンティティーの終わりを報告します。
      void ignorableWhitespace​(char[] cbuf, int off, int len)
      要素コンテンツに含まれる無視できる空白文字の通知を受け取ります。
      static void main​(java.lang.String[] args)
      サンプルプログラムです。
      OGDocument read​(java.io.File aFile)
      XMLファイルを読み込み、OGDocument を返します。
      void startCDATA()
      CDATA セクションの開始を報告します。
      void startDocument()
      文書の開始通知を受け取ります。
      void startDTD​(java.lang.String name, java.lang.String publicId, java.lang.String systemId)
      DTD 宣言がある場合、その開始を報告します。
      void startElement​(java.lang.String uri, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes attributes)
      要素の開始通知を受け取ります。
      void startEntity​(java.lang.String name)
      内部および外部の XML エンティティーの一部の開始を報告します。
      OGDocument string2Node​(java.lang.String str)
      XML形式で表現された、文字列(String) から、OGDocument を構築します。
      void warning​(org.xml.sax.SAXParseException ex)
      パーサー警告の通知を受け取ります。
      void write​(java.io.File aFile, OGDocument node)
      OGDocument を所定のファイルに、XML形式で書き出します。
      • クラスから継承されたメソッド org.xml.sax.ext.DefaultHandler2

        attributeDecl, elementDecl, externalEntityDecl, getExternalSubset, internalEntityDecl, resolveEntity, resolveEntity
      • クラスから継承されたメソッド org.xml.sax.helpers.DefaultHandler

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

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • コンストラクタの詳細

      • JspSaxParser

        public JspSaxParser()
    • メソッドの詳細

      • read

        public OGDocument read​(java.io.File aFile)
        XMLファイルを読み込み、OGDocument を返します。 内部的には、SAXParserFactory から、SAXParser を構築し、Property に、 http://xml.org/sax/properties/lexical-handler を設定しています。 コメントノードを処理するためです。
        パラメータ:
        aFile - XMLファイル
        戻り値:
        ファイルから読み取って構築したOGDocumentオブジェクト
        変更履歴:
        5.1.9.0 (2010/08/01) static からノーマルに変更
        このメソッドは、nullを返しません
      • string2Node

        public OGDocument string2Node​(java.lang.String str)
        XML形式で表現された、文字列(String) から、OGDocument を構築します。 処理的には、#read( File ) と同じで、取り出す元が、文字列というだけです。 XMLファイルからの読み込みと異なり、通常は、Element を表現した文字列が作成されますが、 返されるのは、OGDocument オブジェクトです。
        パラメータ:
        str - XML形式で表現された文字列
        戻り値:
        ファイルから読み取って構築した OGDocumentオブジェクト
        変更履歴:
        5.1.9.0 (2010/08/01) static からノーマルに変更
        このメソッドは、nullを返しません
      • write

        public void write​(java.io.File aFile,
                          OGDocument node)
        OGDocument を所定のファイルに、XML形式で書き出します。
        パラメータ:
        aFile - 書き出すファイル
        node - 書き出す OGDocument
        変更履歴:
        6.3.8.0 (2015/09/11) FileUtil#getPrintWriter( File,String ) を使用。
      • copyDirectry

        public void copyDirectry​(java.io.File fromFile,
                                 java.io.File toFile)
        ディレクトリの再帰処理でパース処理を行います。
        パラメータ:
        fromFile - 読み取りもとのファイル/フォルダ
        toFile - 書き込み先のファイル/フォルダ
        変更履歴:
        5.1.9.0 (2010/08/01) static からノーマルに変更
      • addFilter

        public void addFilter​(JspParserFilter filter)
        copyDirectry 処理で、OGDocument をフィルター処理するオブジェクトを登録します。 内部リストへフィルターを追加します。 フィルター処理は、追加された順に行われます。 内部リストへの追加はできますが、削除はできません。
        パラメータ:
        filter - フィルターオブジェクト
        変更履歴:
        5.1.9.0 (2010/08/01) 新規追加
      • startDocument

        public void startDocument()
        文書の開始通知を受け取ります。 インタフェース ContentHandler 内の startDocument
        定義:
        startDocument インタフェース内 org.xml.sax.ContentHandler
        オーバーライド:
        startDocument クラス内 org.xml.sax.helpers.DefaultHandler
        関連項目:
        DefaultHandler.startDocument(), ContentHandler.startDocument()
        変更履歴:
        6.4.3.1 (2016/02/12) PMD refactoring. HashMap → ConcurrentHashMap に置き換え。
      • startElement

        public void startElement​(java.lang.String uri,
                                 java.lang.String localName,
                                 java.lang.String qName,
                                 org.xml.sax.Attributes attributes)
        要素の開始通知を受け取ります。 インタフェース ContentHandler 内の startElement
        定義:
        startElement インタフェース内 org.xml.sax.ContentHandler
        オーバーライド:
        startElement クラス内 org.xml.sax.helpers.DefaultHandler
        パラメータ:
        uri - 名前空間 URI。要素が名前空間 URI を持たない場合、または名前空間処理が実行されない場合は null
        localName - 前置修飾子を含まないローカル名。名前空間処理が行われない場合は空文字列
        qName - 接頭辞を持つ修飾名。修飾名を使用できない場合は空文字列
        attributes - 要素に付加された属性。属性が存在しない場合、空の Attributesオブジェクト
        関連項目:
        DefaultHandler.startElement(String,String,String,Attributes), ContentHandler.startElement(String,String,String,Attributes)
      • characters

        public void characters​(char[] cbuf,
                               int off,
                               int len)
        要素内の文字データの通知を受け取ります。 エンティティー内かどうかを判断する、inEntity フラグが true の間は、 何も処理しません。 インタフェース ContentHandler 内の characters
        定義:
        characters インタフェース内 org.xml.sax.ContentHandler
        オーバーライド:
        characters クラス内 org.xml.sax.helpers.DefaultHandler
        パラメータ:
        cbuf - 文字データ配列
        off - 文字配列内の開始位置
        len - 文字配列から使用される文字数
        関連項目:
        DefaultHandler.characters(char[],int,int), ContentHandler.characters(char[],int,int)
      • startCDATA

        public void startCDATA()
        CDATA セクションの開始を報告します。 CDATA セクションのコンテンツは、正規の characters イベントを介して報告されます。 このイベントは境界の報告だけに使用されます。 インタフェース LexicalHandler 内の startCDATA
        定義:
        startCDATA インタフェース内 org.xml.sax.ext.LexicalHandler
        オーバーライド:
        startCDATA クラス内 org.xml.sax.ext.DefaultHandler2
        関連項目:
        DefaultHandler2.startCDATA(), LexicalHandler.startCDATA()
      • endCDATA

        public void endCDATA()
        CDATA セクションの終わりを報告します。 インタフェース LexicalHandler 内の endCDATA
        定義:
        endCDATA インタフェース内 org.xml.sax.ext.LexicalHandler
        オーバーライド:
        endCDATA クラス内 org.xml.sax.ext.DefaultHandler2
        関連項目:
        DefaultHandler2.endCDATA(), LexicalHandler.endCDATA()
      • startDTD

        public void startDTD​(java.lang.String name,
                             java.lang.String publicId,
                             java.lang.String systemId)
        DTD 宣言がある場合、その開始を報告します。 start/endDTD イベントは、ContentHandler の start/endDocument イベント内の最初の startElement イベントの前に出現します。 インタフェース LexicalHandler 内の startDTD
        定義:
        startDTD インタフェース内 org.xml.sax.ext.LexicalHandler
        オーバーライド:
        startDTD クラス内 org.xml.sax.ext.DefaultHandler2
        パラメータ:
        name - 文書型名
        publicId - 宣言された外部 DTD サブセットの公開識別子。 宣言されていない場合は null
        systemId - 宣言された外部 DTD サブセットのシステム識別子。 宣言されていない場合は null。 ドキュメントのベース URI に対しては解決されないことに 注意すること
        関連項目:
        DefaultHandler2.startDTD( String , String , String ), LexicalHandler.startDTD( String , String , String )
      • endDTD

        public void endDTD()
        DTD 宣言の終わりを報告します。 このメソッドは、DOCTYPE 宣言の終わりを報告するメソッドです。 ここでは、何もしません。 インタフェース LexicalHandler 内の endDTD
        定義:
        endDTD インタフェース内 org.xml.sax.ext.LexicalHandler
        オーバーライド:
        endDTD クラス内 org.xml.sax.ext.DefaultHandler2
        関連項目:
        DefaultHandler2.endDTD(), LexicalHandler.endDTD()
      • startEntity

        public void startEntity​(java.lang.String name)
        内部および外部の XML エンティティーの一部の開始を報告します。 インタフェース LexicalHandler の記述: ※ ここでは、< などの文字列が、lt という名のエンティティーで 報告されるため、元の&付きの文字列に復元しています。 エンティティー内かどうかを判断する、inEntity フラグを true にセットします。 inEntity=true の間は、#characters(char[],int,int) は、何も処理しません。
        定義:
        startEntity インタフェース内 org.xml.sax.ext.LexicalHandler
        オーバーライド:
        startEntity クラス内 org.xml.sax.ext.DefaultHandler2
        パラメータ:
        name - エンティティーの名前
        関連項目:
        LexicalHandler.startEntity(String)
      • endEntity

        public void endEntity​(java.lang.String name)
        エンティティーの終わりを報告します。 インタフェース LexicalHandler の記述: ※ ここでは、inEntity=false を設定するだけです。
        定義:
        endEntity インタフェース内 org.xml.sax.ext.LexicalHandler
        オーバーライド:
        endEntity クラス内 org.xml.sax.ext.DefaultHandler2
        パラメータ:
        name - エンティティーの名前
        関連項目:
        LexicalHandler.endEntity(String)
      • ignorableWhitespace

        public void ignorableWhitespace​(char[] cbuf,
                                        int off,
                                        int len)
        要素コンテンツに含まれる無視できる空白文字の通知を受け取ります。 インタフェース ContentHandler 内の ignorableWhitespace
        定義:
        ignorableWhitespace インタフェース内 org.xml.sax.ContentHandler
        オーバーライド:
        ignorableWhitespace クラス内 org.xml.sax.helpers.DefaultHandler
        パラメータ:
        cbuf - 文字データ配列(空白文字)
        off - 文字配列内の開始位置
        len - 文字配列から使用される文字数
        関連項目:
        ContentHandler.ignorableWhitespace(char[],int,int)
      • comment

        public void comment​(char[] cbuf,
                            int off,
                            int len)
        文書内の任意の位置にある XML コメントを報告します。 インタフェース LexicalHandler の記述:
        定義:
        comment インタフェース内 org.xml.sax.ext.LexicalHandler
        オーバーライド:
        comment クラス内 org.xml.sax.ext.DefaultHandler2
        パラメータ:
        cbuf - 文字データ配列(コメント文字)
        off - 配列内の開始位置
        len - 配列から読み取られる文字数
        関連項目:
        DefaultHandler.characters(char[],int,int)
      • endElement

        public void endElement​(java.lang.String uri,
                               java.lang.String localName,
                               java.lang.String qName)
        要素の終了通知を受け取ります。
        定義:
        endElement インタフェース内 org.xml.sax.ContentHandler
        オーバーライド:
        endElement クラス内 org.xml.sax.helpers.DefaultHandler
        パラメータ:
        uri - 名前空間 URI。要素が名前空間 URI を持たない場合、または名前空間処理が実行されない場合は null
        localName - 前置修飾子を含まないローカル名。名前空間処理が行われない場合は空文字列
        qName - 接頭辞を持つ修飾名。修飾名を使用できない場合は空文字列
        関連項目:
        DefaultHandler.endElement(String,String,String), ContentHandler.endElement(String,String,String)
      • warning

        public void warning​(org.xml.sax.SAXParseException ex)
        パーサー警告の通知を受け取ります。 インタフェース org.xml.sax.ErrorHandler 内の warning ここでは、パーサー警告の内容を標準エラーに表示します。
        定義:
        warning インタフェース内 org.xml.sax.ErrorHandler
        オーバーライド:
        warning クラス内 org.xml.sax.helpers.DefaultHandler
        パラメータ:
        ex - 例外として符号化された警告情報
        関連項目:
        ErrorHandler.warning(SAXParseException)
      • main

        public static void main​(java.lang.String[] args)
                         throws java.lang.ReflectiveOperationException,
                                java.lang.NoSuchMethodException,
                                java.lang.reflect.InvocationTargetException
        サンプルプログラムです。 引数の IN がファイルの場合は、OUTもファイルとして扱います。 IN がフォルダの場合は、階層にしたがって、再帰的に処理を行い、OUT に出力します。 フォルダ階層をパースしている最中に、XMLとして処理できない、処理中にエラーが発生した などの場合は、バイナリコピーを行います。 "Usage: org.opengion.fukurou.xml.JspSaxParser <inFile|inDir> <outFile|outDir> [<JspParserFilter1> ・・・ ]"
        パラメータ:
        args - コマンド引数配列
        例外:
        java.lang.ClassNotFoundException - クラスが見つからない場合
        java.lang.InstantiationException - インスタンスを生成できなかった場合
        java.lang.IllegalAccessException - 不正なアクセスがあった場合
        java.lang.NoSuchMethodException - 特定のメソッドが見つからない
        java.lang.reflect.InvocationTargetException - 呼び出されるメソッドまたはコンストラクタがスローする例外をラップする、チェック済み例外
        java.lang.ReflectiveOperationException
        変更履歴:
        6.3.9.1 (2015/11/27) A method/constructor shouldnt explicitly throw java.lang.Exception(PMD)。, 6.4.3.3 (2016/03/04) リフレクション系の例外の共通クラスに置き換えます。, 6.8.2.3 (2017/11/10) java9対応(cls.newInstance() → cls.getDeclaredConstructor().newInstance())