Java の軽量 XML パーサ

2006/12/13 9:56am

ユニットテストの実行に XML パーサが必要になった。

org.xml.sax.helpers.XMLReaderFactory.createXMLReader() を使っているので、SAX2 に準拠したパーサが必要だ。

また、ユニットテストのためだけに Xerces のような横綱級ライブラリを含めたくはない。パーサのライブラリは軽くなくてはいけない。

探してみると、条件に当てはまりそうなライブラリがふたつ見つかった。

.jar の容量だけでいえば NanoXML の圧勝。

SAX サポートを追加するための nanoxml-sax-2.2.3.jar を含めても、40KB に満たないコンパクトさだ(なお、NanoXML Lite というバージョンもあり、こちらは 6KB 以下)。ただ、残念なことに SAX 2 が実装されていないようだった。

他方、Piccolo では SAX2 が実装されているようなので、こちらを使うことにする。ドキュメントをよると、 開発に構文解析器 (JFlex)とコンパイラ・コンパイラ (BYACC/J) を用いているのがユニークな点らしい。

SAX パーサは java コマンドに -D オプションで指定するのが一般的だが、今回は System.setProperty で指定した。Piccolo の SAX2 パーサは com.bluecast.xml.Piccolo になる。

System.setProperty("org.xml.sax.driver", "com.bluecast.xml.Piccolo");
...

これで無事、ユニットテストが動作した。