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)