図 3.3 図 3.2で示したSAXの例をJavaで実装したもの。コメントは斜体で示す。 (1) DemoSaxApp.java // SAXパーサインターフェイスとヘルパークラスをロード。 // Javaではこれを明示的に行う必要がある。 // この例は、MicrostarのXMLパーサ(とSAXドライバ)を使っている。 // パーサを交換するには、parserClassの文字列を書き換えるだけ // でいい(って、他にあれば、の話だけれど ;-) import org.xml.sax.Parser; import org.xml.sax.DocumentHandler; import org.xml.sax.helpers.ParserFactory; public class DemoSaxApp { static final String parserClass = "com.microstar.xml.SAXDriver"; public static void main (String args[]) throws Exception { Parser parser = ParserFactory.makeParser(parserClass); DocumentHandler handler = new MySAXHandler(); parser.setDocumentHandler(handler); for (int i = 0; i < args.length; i++) { parser.parse(args[i]); } } } (B) MySAXHandler.java // ここでもSAXハンドラクラスを明示的にロードする必要がある。 // 我々が作ったハンドラで、それを拡張するのだから。 // 次に、我々のハンドラのメソッドを作成する。これらによって // 基底クラスのHandlerBaseの定義がオーバーロードされる。 import org.xml.sax.HandlerBase; import org.xml.sax.AttributeList; public class MySAXHandler extends HandlerBase { String myString; public void startDocument (String name) { System.out.println("Event: 文書の始まり"); } public void endDocument (String name) { System.out.println("Event: 文書の終わり"); } public void startElement (String name, AttributeList atts) { System.out.println("Event: 要素開始: " + name); } public void endElement (String name) { System.out.println("Event: 要素終了: " + name); } public void characters (char chars[], int start, int length) { myString = new String(chars, start, length); System.out.println("Event: テキスト文字列[" + myString + "]"); } }