Qt4 には QtXml モジュールとして各種 XML 用ユーティリティが用意されています。その中に DOM とともに Simple API for XML(SAX)が含まれています。
saxproject.org のサイトで述べられているように、元々 SAX は Java SE の org.xml.sax として確立され、そのイベント駆動によるパージングのためのインターフェイスが他のプログラミング言語にも移植されています。
オープンソースになっている移植例として
があります。
これらの例のドキュメンテーションで説明されている利用法の概略として: アプリケーションプログラマはベースとなるクラス ContentHandler
を継承してパースするためのアプリケーションコードを実装します。このクラスには startElement()
、characters()
などの関数(ないしメソッド)がエントリーポイントとして存在します。制御の面倒を見る reader に handler を与えてパースさせます。
今回注目したのは、これら関数の戻り値です。オリジナル Java 版では void
になっており何も返しません。Qt4 の QXmlContentHandler
の仮想関数は bool
値を返します。もし false
を返せば、reader は handler がエラーを検出したと見なしてパージングを止めます。
戻り値を利用できないオリジナル Java 版では、handler 自身がパージングを止める処理をしなければなりません。単に reader 側に制御を返すわけにはいかないので、専用の例外に頼ることになります。しかし一般に例外は単なる関数呼び出しより複雑なセマンティクスを持ちます。この戻り値の利用はアプリケーションコードを単純にする工夫と言えます。