| Home | Develop | Customize | App |
簡単な構造のXMLを読み込むだけならば、DOMよりもSAXのほうが楽なくらいです。
MicrosoftのSAX2 Jumpstartを参考にするのがよいかと。 MSXMLの特徴は、SAXのイベントハンドラがCOMインタフェイスであることです。 サンプルを見る限りは、単純なC++クラスとして実装しています。 自分のアプリケーション内部のみで使うならば、COMとしての実装はいい加減で良いようです。
SAXを使う限りは、テキストエレメントよりも属性にしたほうが手間を省けるようです。 エレメントはコールバックで処理するため、内部状態の遷移を考えなくてはなりませんが、 属性は「名前−属性値」の連想配列として扱えるためです。 末端ノードの情報は属性にしてしまいましょう。
<character>
<name>はにゃーん</name>
</character>
より、
<character name="はにゃーん"/>
のほうが楽です。
SAXは、木構造のXMLを深さ優先で順にコールバックしてくれます。 そのため、内部状態の保持にはスタックを使うと簡単なようです。
MSXML3では、ハンドラに渡される文字列がヌル終端でしたが、MSXML4ではヌル終端でなくなったことに注意が必要です。 同時に渡される文字数を参照する必要があります。 C++からは激しく使いづらくなってしまいました。
外部XMLからメニュバーとキーボードアクセラレータを読み込むサンプル。 エディタなどの「カスタマイズができてなんぼ」なアプリケーションに使うと、 簡単に編集できて便利なんじゃないかと。
2004/02/09