パッケージ org.opengion.fukurou.xml
クラス JspSaxParser
- java.lang.Object
-
- org.xml.sax.helpers.DefaultHandler
-
- org.xml.sax.ext.DefaultHandler2
-
- 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()
-
メソッドの概要
すべてのメソッド staticメソッド インスタンス・メソッド concreteメソッド 修飾子とタイプ メソッド 説明 voidaddFilter(JspParserFilter filter)copyDirectry 処理で、OGDocument をフィルター処理するオブジェクトを登録します。voidcharacters(char[] cbuf, int off, int len)要素内の文字データの通知を受け取ります。voidcomment(char[] cbuf, int off, int len)文書内の任意の位置にある XML コメントを報告します。voidcopyDirectry(File fromFile, File toFile)ディレクトリの再帰処理でパース処理を行います。voidendCDATA()CDATA セクションの終わりを報告します。voidendDTD()DTD 宣言の終わりを報告します。voidendElement(String uri, String localName, String qName)要素の終了通知を受け取ります。voidendEntity(String name)エンティティーの終わりを報告します。voidignorableWhitespace(char[] cbuf, int off, int len)要素コンテンツに含まれる無視できる空白文字の通知を受け取ります。static voidmain(String[] args)サンプルプログラムです。OGDocumentread(File aFile)XMLファイルを読み込み、OGDocument を返します。voidstartCDATA()CDATA セクションの開始を報告します。voidstartDocument()文書の開始通知を受け取ります。voidstartDTD(String name, String publicId, String systemId)DTD 宣言がある場合、その開始を報告します。voidstartElement(String uri, String localName, String qName, Attributes attributes)要素の開始通知を受け取ります。voidstartEntity(String name)内部および外部の XML エンティティーの一部の開始を報告します。OGDocumentstring2Node(String str)XML形式で表現された、文字列(String) から、OGDocument を構築します。voidwarning(SAXParseException ex)パーサー警告の通知を受け取ります。voidwrite(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
-
-
-
-
メソッドの詳細
-
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) 新規追加
-
startDocument
public void startDocument()
文書の開始通知を受け取ります。 インタフェース ContentHandler 内の startDocument- 定義:
startDocumentインタフェース内ContentHandler- オーバーライド:
startDocumentクラス内DefaultHandler- 関連項目:
DefaultHandler.startDocument(),ContentHandler.startDocument()- 変更履歴:
- 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 を持たない場合、または名前空間処理が実行されない場合は nulllocalName- 前置修飾子を含まないローカル名。名前空間処理が行われない場合は空文字列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インタフェース内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()
-
endCDATA
public void endCDATA()
CDATA セクションの終わりを報告します。 インタフェース LexicalHandler 内の endCDATA- 定義:
endCDATAインタフェース内LexicalHandler- オーバーライド:
endCDATAクラス内DefaultHandler2- 関連項目:
DefaultHandler2.endCDATA(),LexicalHandler.endCDATA()
-
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 サブセットの公開識別子。 宣言されていない場合は nullsystemId- 宣言された外部 DTD サブセットのシステム識別子。 宣言されていない場合は null。 ドキュメントのベース URI に対しては解決されないことに 注意すること- 関連項目:
DefaultHandler2.startDTD( String , String , String ),LexicalHandler.startDTD( String , String , String )
-
endDTD
public void endDTD()
DTD 宣言の終わりを報告します。 このメソッドは、DOCTYPE 宣言の終わりを報告するメソッドです。 ここでは、何もしません。 インタフェース LexicalHandler 内の endDTD- 定義:
endDTDインタフェース内LexicalHandler- オーバーライド:
endDTDクラス内DefaultHandler2- 関連項目:
DefaultHandler2.endDTD(),LexicalHandler.endDTD()
-
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)
-
endElement
public void endElement(String uri, String localName, String qName)
要素の終了通知を受け取ります。- 定義:
endElementインタフェース内ContentHandler- オーバーライド:
endElementクラス内DefaultHandler- パラメータ:
uri- 名前空間 URI。要素が名前空間 URI を持たない場合、または名前空間処理が実行されない場合は nulllocalName- 前置修飾子を含まないローカル名。名前空間処理が行われない場合は空文字列qName- 接頭辞を持つ修飾名。修飾名を使用できない場合は空文字列- 関連項目:
DefaultHandler.endElement(String,String,String),ContentHandler.endElement(String,String,String)
-
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())
-
-