2. XML文書を読む12005.11.30 株式会社四次元データ 宮澤了祐 2.1. イベントハンドラSAXはXMLファイルを先頭より解釈し、タグの開始等のイベントをハンドラに通知します。 イベントにはいくつか種類があり、同じ数だけイベントを受け取るハンドラが存在します。 SAXで発生するイベントとそれを受信するハンドラのインタフェース一覧です。
これらのインタフェースを標準的な形で実装したのが、 org.xml.sax.helpers.DefaultHandler です。
DefaultHandlerは上記の全ての種類のイベントを受け取ることが出来ます。 SAXParserFactory spfactory = SAXParserFactory.newInstance();
XMLReader reader = spfactory.newSAXParser().getXMLReader();
reader.setDocumentHandler(myDocumentHandler);
reader.setDTDHandler(myDTDHandler);
reader.setEntityResolver(myEntityResolver)
reader.setErrorHandler(myErrorHandler)
reader.parse("hogehoge.xml");
javax.xml.parsers.SAXParserを使用する場合は、各イベントハンドラを実装したDefaultHandlerをイベントハンドラの対象とします。 2.2. 要素の取得次のようなXML文書をSAXで解析するとします。 1:<?xml version="1.0" encoding="euc-jp" ?> 2:<root> 3: <text>Hello SAX!!!</text> 4:</root> 要素の開始はDefaultHandlerのstartElement()メソッドで、要素の終了はDefaultHandler.endElement()メソッドで受け取ります。 またボディ部のテキストはDefaultHandler.characters()メソッドで受け取ることが出来ます。 public void startElement(String uri,String localName,String qName,Attributes attributes) {
System.out.println("要素開始:" + qName);
}
public void endElement(String uri,String localName,String qName) {
System.out.println("要素終了:" + qName);
}
public void characters(char[] ch,int offset,int length) {
System.out.println("テキストデータ:" + new String(ch, offset, length));
}
startElemtnt()メソッド及びendElement()メソッドの第三引数に、要素名が入っています。 characters()メソッドの第一引数に文字バッファが、第二引数に文字配列内の開始位置が、第三引数に文字の長さが入っています。 次のように出力されれば成功です。 要素開始:root 要素開始:text テキストデータ:Hello SAX!!! 要素終了:text 要素終了:root |
![]()
![]()
|