Home > Tags > XML
XML
C/C++ XMLライブラリ
- 2008-07-02 (水)
- Programming
仕事で必要だったのでC/C++のXMLパーサーを調べてみた。以下のリストが主要なXMLパーサーらしい。JavaやC#やLLな言語だとXMLのパースもさほど大変ではないけどC/C++でやろうとすると結構厳しいですね。特にCが厳しいです。C++はライブラリも豊富でC++マスターにとってはそんなに大変そうでもないでしょうけど、やっぱC++は複雑です。5,6年ぶりくらいにC/C++に再入門いたしましたw
- TinyXML zlib/libpng License
- Xerces C++ Apache2 License
- expat MIT License
- MSXML MSLicense?(不明)
- libxml2 MIT License
さて、上記4つのXMLパサーですが、TinyXMLはDOMのみのようで、expatはSAXのみのようです。(サードパーティー製のラッパー等を使えばその限りではない。)XercesとMSXMLとlibxml2はDOMとSAXの両方をサポートしてます。TinyXMLについてはあまり調査をしていません。Xerces C++はバイナリレベルで数M~数十Mとかなりでかいライブラリです。その分XML Validateなどの機能もついていてかなり多機能です。ですが、今回の仕事のXMLの仕様は至極単純な物なので、それだけのために数十Mのバイナリになるのは気が引けたのでXercesの使用はあきらめました。MSXMLもほぼどうようですが、MSだし、メモリリークがあるとかで使用しませんでした。libxml2は依存するライブラリが多いみたいなので却下。最終的にはexpatが高速軽量ということでこれを使うことにしました。
VC9でexpatライブラリをコンパイルするにはダウンロードしたexpat-2.0.1.zip等を展開し、展開されたフォルダのexpat.dswを開くだけです。dswはVC6用ですが、変換すればVC9でも使えます。あとはビルドすればwin32フォルダ/bin/Debug(Release)以下に目的のものができています。このライブラリのスタティック版をVC9で使うときの注意点ですが、コンパイルオプションに/D “XML_STATIC”を追加しなくてはなりません。もしくはグローバルマクロでXML_STATICを宣言します。これがわからないと2,3時間は悩みます。あとで知ったんだけど、README.txtの最後に
An application linking to the static libraries must
have the global macro XML_STATIC defined.
とありました。なんとも悲劇。READMEはちゃんと読む癖をつけないといけません。今日の教訓w
P.S. Wizサンクス!
- Comments: 2
- Trackbacks: 0
Home > Tags > XML
- Search
- Feeds
- Meta