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

クラス JspSaxParser

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

    public class JspSaxParser
    extends 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

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

      • read

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

        public void copyDirectry​(File fromFile,
                                 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) 新規追加
      • characters

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

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

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

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

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

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

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

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

        public static void main​(String[] args)
                         throws ReflectiveOperationException,
                                NoSuchMethodException,
                                InvocationTargetException
        サンプルプログラムです。 引数の IN がファイルの場合は、OUTもファイルとして扱います。 IN がフォルダの場合は、階層にしたがって、再帰的に処理を行い、OUT に出力します。 フォルダ階層をパースしている最中に、XMLとして処理できない、処理中にエラーが発生した などの場合は、バイナリコピーを行います。 "Usage: org.opengion.fukurou.xml.JspSaxParser <inFile|inDir> <outFile|outDir> [<JspParserFilter1> ・・・ ]"
        パラメータ:
        args - コマンド引数配列
        例外:
        ClassNotFoundException - クラスが見つからない場合
        InstantiationException - インスタンスを生成できなかった場合
        IllegalAccessException - 不正なアクセスがあった場合
        NoSuchMethodException - 特定のメソッドが見つからない
        InvocationTargetException - 呼び出されるメソッドまたはコンストラクタがスローする例外をラップする、チェック済み例外
        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())