1 / 14

SAX

SAX. 10-1 SAX の概要 10-2 Sax プログラミングの基礎 10-3 sax のプログラム例. SAX の概要 (1). XML 文書を利用したり操作するための標準化されたインターフェイス. DOM は XML 文書全体をメモ リにロードする必要がある. SAX はドキュメントを読み込 みながら処理を行う. * SAX は反応が早く、メモリ消費量の少ないプログラムを作成  することが可能 *ネットワークを介してドキュメントを読み込みながら作業がで  きる. SAX の概要 (2).

Download Presentation

SAX

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SAX 10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例

  2. SAXの概要(1) • XML文書を利用したり操作するための標準化されたインターフェイス DOMはXML文書全体をメモ リにロードする必要がある SAXはドキュメントを読み込 みながら処理を行う *SAXは反応が早く、メモリ消費量の少ないプログラムを作成  することが可能 *ネットワークを介してドキュメントを読み込みながら作業がで  きる

  3. SAXの概要(2) • 実際のプログラミングでは、SAXをサポートするXMLパーサーを使用

  4. イベント処理型プログラミング ドキュメントの変更と新規作成 SAXの利用上の注意点 SAXはXML文書を読み込みながらイベン トを発生させ、イベントを処理することでド キュメントにアクセスしたり操作したりする SAXでXML文書やHTML文書を変更した り生成したりするとき フィルターのように結果を随時出力する 生成したり変更するドキュメントの内容を メモリ上に保存するデータ構造を独自に 作る ドキュメントの生成部分にDOMを利用す る必要がある イベント処理型のプログラミングが必要 適切でない時 DOMを使用する

  5. SAXプログラミングの基礎        イベントとイベントハンドラ(1)  ドキュメントを読み込みながら、ドキュメントの開始と終了、要素(エレメント)の開始と終了、エラーなどのイベントを検出すし、プログラムに通知する プログラムでは、処理したいイベントごとにイベントハンドラを作 成して、そのイベントハンドラでイベントを処理する パーサーのイベントハンドラにはインターフェイスを介してアクセ スするので、処理したいイベントにアクセスするためのインター フェイスを実装するクラスを作り、そこにイベントハンドラで実行 したいことをプログラムコードで記述する

  6. 主なイベントハンドラ SAXイベントハンドラのインターフェイス

  7. イベントとイベントハンドラ(2)       基本的に必要な作業はこれだけ!! (SAXでXML文書を読み込んで解析するための通常作業) • 処理したいイベントのイベントハンドラを記述する • SAXパーサーオブジェクトを作成する • イベントハンドラを登録する • Parse()メソッドを呼び出す

  8. SAXのプログラム例 クラスの定義 XML文書を読み込んだときに発生するSAXのイベントをイベント ハンドラで処理するために、イベントハンドラを実装するクラスを 最初に作成する必要がある JavaのDefaultHandlerクラスを拡張してクラスを定義する方法 public class SAXParse extends org.xml.sa.helpers.DefaultHandler { // クラスの定義 }

  9. イベントの処理 ・ドキュメントを読み込み始めたときのイベントを処理するイベントハンドラ public void startDocument () { System.out.println("Start document"); } ・ドキュメントをすべて読み込み終わったときのイベントを処理するイベントハンドラ public void endDocument () { System.out.println("End document"); }

  10. 要素を読み込み始めたときのイベントを処理するstartElementイベントハンドラ作成の例要素を読み込み始めたときのイベントを処理するstartElementイベントハンドラ作成の例 public void startElement (String uri, String name, String qName, Attributes atts) { // 要素を表示する System.out.print("Start element:uri=" + uri); System.out.println(" name=" + name + "qName="+qName); // 属性値の数を取得する int 1 = atts.getLength(); if (1 > 0) { System.out.println(" Attr"); // 各属性を表示する for (int i=0; i<1; i++) { String LocalName = atts.getLocalName(i); String QName = atts.getQName(i); String pName = atts.getValue(i); System.out.print(" LocalName=" + LocalName); System.out.println(" QName=" + QName + " pName=" +pName); } } }

  11. キャラクタイベントを抽出するコードの例 public void characters (char ch[], int start, int length) { System.out.print("Characters:["); for (int i = start; i < start + length; i++){ switch (ch[i]) { case '\n': System.out.print("\\n"); break; default: System.out.print(ch[i]); break; } } System.out.println("]"); }

  12. XML文書のパース(1) • イベントハンドラを記述してクラス全体を定義したら、必要に応じてイベントハンドラを呼び出してXML文書をパースする例 public void parseXML(String urlString) throws Exception { SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); ParserAdapter pa = new ParserAdapter(sp.getParser()); pa.setContentHandler(this); pa.parse(urlString); }

  13. XML文書のパース(2) import javax.xml.parser.*; public class SAXparse extends org.xml.sax.helpers.DefaultHandler{ public static void main(String[] args) { try { SAXParse us = new SAXParse(); us.parseXML(args[0]); } catch (Throwable t) { t.printStackTrace(); } }

  14. 宿題 • P216~のSAXプログラムのサンプルをやってみてください

More Related