パッケージ 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 メソッドを廃止。通常のオブジェクトクラスとして扱います。
導入されたバージョン:
JDK6.0,
  • コンストラクタの詳細

    • JspSaxParser

      public JspSaxParser()
      デフォルトコンストラクター
      変更履歴:
      8.5.3.2 (2023/10/13) JDK21対応。警告: デフォルトのコンストラクタの使用で、コメントが指定されていません
  • メソッドの詳細

    • 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

      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 ) を使用。, 8.5.4.2 (2024/01/12) PMD 7.0.0 CloseResource 対応
    • 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) 新規追加
    • startDocument

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

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

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

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

      public void endCDATA()
      CDATA セクションの終わりを報告します。 インタフェース LexicalHandler 内の endCDATA
      定義:
      endCDATA インタフェース内 LexicalHandler
      オーバーライド:
      endCDATA クラス内 DefaultHandler2
      関連項目:
    • 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 に対しては解決されないことに 注意すること
      関連項目:
    • endDTD

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

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

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

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

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

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

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

      サンプルプログラムです。 引数の 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())