Xerces-sax-parser

提供:Dev Guides
移動先:案内検索

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)*