『XHTMLによるWeb開発』図 3-3 (pp.91-92)

図 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 + "]");
  }
}