Simple API for XML
表示
Simple API for XML(SAX、サックス)とは、XML文書をアプリケーションから利用するためのAPI。
概要
W3Cから勧告されたDOMに対し、XML-DEVメーリングリスト有志により策定された。そして、DOMに並ぶ標準規格としての地位を固めている。
XML文書をツリー構造として扱うDOMと異なり、一連のイベントとして表現するイベント駆動型のAPIである。したがって、アプリケーションが積極的にAPIにアクセスするDOMに対し、SAXではアプリケーションがイベントが来るのを待ち受ける受動的な動作が大部分を占める。
伝統的なストリームと同様に入力されたデータを次々とバトンタッチさせるような設計が可能となるため、メモリを節約でき、並列処理にも適している。プログラムもDOMを使った場合に比べてシンプルになることも多い。XMLを読み込み、Javaのオブジェクトに変換するときもSAXの方がよく使われる。ただし、XML文書の先頭と最後を入れ替えるというようなランダムアクセスを必要とするアプリケーションにはDOMやXMLデータベースの方が適している。
Cocoonのようなスケーラビリティの高い優れたSAXアプリケーションが開発されている。
使用例
以下、Javaでの使用例。特別:RecentchangesのRSSを読み込み、タイトルの一覧を表示している。
import java.io.IOException; import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; public class Test { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse("http://ja.wikipedia.org/w/index.php?title=%E7%89%B9%E5%88%A5:Recentchanges&feed=rss", new DefaultHandler() { private String text = ""; private boolean isItemStarted = false; public void startElement(String uri, String localName, String qName, Attributes attributes) { if(qName.equals("item")) { isItemStarted = true; } } public void endElement(String uri, String localName, String qName) { if (isItemStarted && qName.equals("title")) { System.out.println(text); } } public void characters(char[] ch, int start, int length) { text = new String(ch, start, length); } }); } }