パーサとSAXの処理

Download Report

Transcript パーサとSAXの処理

応用Java(Java/XML) 第2回
2006年4月21日
植田龍男
JavaでXMLを処理するには?
XMLはテキストファイル
=>独自に文字単位で処理は可能
 XMLは独自の文法を持つ
要素(タグ)と属性(名前と値のペア)
< > </> =
 XML文書は設計に基づく構造を持つ
*自前で処理は煩雑、誰がやっても同じ
=>専用のパッケージ(API)があれば・・・

XML文書の処理



XMLパーサ(parser)の概念
パーサの規格(SAX,DOM、他)
Javaによるパーサの実現
Sunによる参照実装
Apacheプロジェクト
( http://xml.apache.org/ )
JAXPの発想





多数のパーサの実装を統合する枠組み
JAXP自体は構文解析を行うわけではない
パーサはJAXPとは独立できる
パーサの実装に非依存なアプリケーション
実現のために抽象化されたクラス群を定
義
J2SE 1.4以降のAPI




javax.xml.parsers
org.xml.sax
org.w3c.dom
javax.xml.transform
javax.xml.parsers





最も抽象化されたレベル(JAXP)
パーサを「取り出す」ための仕組みを提供
SAXParser,
SAXParserFactory
DocumentBuilder,
DocumentBuilderFactory
唯一の手段ではないが、「標準」を提供
パーサの実装に制限は課さない
パーサを取得するパターン(1)
SAXParserFactory spf =
SAXParserFactory.newInstance();
SAXParser parser =
spf.newSAXParser();
XMLReader reader =
parser.getXMLReader();
org.xml.sax


SAX(Simple API for XML)
サブパッケージ
org.xml.sax.ext
org.xml.sax.helpers
XMLパーサのいろいろ



Sun の実装参照
Apache の Crimson (J2SE 1.4)
Apahce の Xerces (J2SE 5.0 )
SAXによる処理




SAX(=Simple API for XML )
SAX の仕組み(イベント駆動型処理)
ContentHandler
ErrorHandler
JAXP による SAXパーサの取得
SAXParserFactory spf =
SAXParserFactory.newInstance();
SAXParser parser =
spf.newSAXParser();
XMLreader reader =
parser.getXMLReader();
SAXの処理の特徴
XML文書を読み込みながら処理
 特定の「節目」でイベントが発生
(イベント駆動型の処理)
 イベントの処理はHandlerが担当
ContentHandler(のサブクラス)
ErrorHandler(のサブクラス)

XMLReaderへのHandlerの登録
XMLReader reader =
parser.getXMLReader();
reader.setContentHandler(
new MyContentHandler() );
reader.setErrorHandler(
new MyErrorHandler() );
その後で、パーシングを開始
XMLReader reader ….
:
InputSource source =
new InputSource( “sample.xml” );
reader.parse( source );
SAXの処理の特徴
XML文書の読み込みと処理が並行に進行
 要素(タグ)ごとに逐次処理
 読み込みと処理は同時に終了
(後処理には別の機構が必要)

ContentHandler の主要な仕事





startDocument() – パーシングの開始時
endDocument() – パーシングの終了時
startElement() – 要素(タグ)の開始
endElement() – 要素(タグ)の終了
characters() – 平文テキストの読み込み
ContentHandler その他の機能
名前空間の処理
 妥当性の検証とWhite Spaceの処理
*以上は次回以降に利用

ErrorHandlerの仕事




3つのエラーレベル
fatalError
文書名の間違い、不存在
XML文書として不適切(文法エラー)
error
XML文書の設計に不適合(非妥当性)
warning
エラーではない不適切な記述