SAXパーサー-概要
SAX(Simple API for XML)は、xmlドキュメント用のイベントベースのパーサーです。DOMパーサーとは異なり、SAXパーサーは解析ツリーを作成しません。SAXはXMLのストリーミングインターフェイスです。つまり、SAXを使用するアプリケーションは、処理中のXMLドキュメントに関するイベント通知(要素と属性)を、ドキュメントの先頭から始まり、の終わりまで順番に受信します。 ROOT要素。
XMLドキュメントを上から下に読み取り、整形式のXMLドキュメントを構成するトークンを認識します。
トークンは、ドキュメントに表示されているのと同じ順序で処理されます。
アプリケーションプログラム、パーサーが発生したときに検出したトークンの性質を報告します。
アプリケーションプログラムは、パーサーに登録する必要のある「イベント」ハンドラーを提供します。
トークンが識別されると、ハンドラーのコールバックメソッドが関連情報とともに呼び出されます。
いつ使用しますか?
−の場合はSAXパーサーを使用する必要があります
XMLドキュメントは上から下に直線的に処理できます。
ドキュメントは深くネストされていません。
DOMツリーが大量のメモリを消費する非常に大きなXMLドキュメントを処理しています。一般的なDOM実装では、10バイトのメモリを使用して1バイトのXMLを表します。
解決すべき問題は、XMLドキュメントの一部のみに関係します。
データはパーサーに表示されるとすぐに利用できるため、SAXはストリームを介して到着するXMLドキュメントに適しています。
SAXのデメリット
XMLドキュメントはフォワードオンリー方式で処理されるため、ランダムアクセスはありません。
パーサーが確認したデータを追跡したり、アイテムの順序を変更したりする必要がある場合は、コードを記述してデータを自分で保存する必要があります。
ContentHandlerインターフェース
このインターフェイスは、SAXパーサーがXMLドキュメントのコンポーネントをアプリケーションプログラムに通知するために使用するコールバックメソッドを指定します。
void startDocument() −ドキュメントの冒頭で呼び出されます。
void endDocument() −ドキュメントの冒頭で呼び出されます。
void startElement(String uri, String localName, String qName, Attributes atts) −要素の先頭で呼び出されます。
void endElement(String uri, String localName,String qName) −要素の最後で呼び出されます。
void characters(char[] ch, int start, int length) −文字データが検出されたときに呼び出されます。
void ignorableWhitespace( char[] ch, int start, int length) − DTDが存在し、無視できる空白が検出された場合に呼び出されます。
void processingInstruction(String target, String data) −処理命令が認識されたときに呼び出されます。
void setDocumentLocator(Locator locator)) −ドキュメント内の位置を識別するために使用できるロケーターを提供します。
void skippedEntity(String name) −未解決のエンティティが検出されたときに呼び出されます。
void startPrefixMapping(String prefix, String uri) −新しい名前空間マッピングが定義されたときに呼び出されます。
void endPrefixMapping(String prefix) −名前空間定義がそのスコープを終了したときに呼び出されます。
属性インターフェース
このインターフェースは、要素に接続された属性を処理するためのメソッドを指定します。
int getLength() −属性の数を返します。
String getQName(int index)
String getValue(int index)
String getValue(String qname)