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