- 2008-07-02 (水) 21:17
- 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サンクス!
- Newer: 第1回 VMWare Serverの仮想マシン作成
- Older: RGM3800 .NET Library
Comments:2
- wiz@_( (_´Д`)_ 08-07-04 (金) 20:37
-
( ^ω^)メモリリークからは逃げられないぉ
( ^ω^)情報リークは最近のはやりだぉ - Sampo 09-04-16 (木) 16:14
-
XML_STATICのせいで同じように悩んでいて、そうですね、2,3時間でしょうか。助かりました。
Trackbacks:0
- Trackback URL for this entry
- http://anoy.cspc.jp/wp-trackback.php?p=31
- Listed below are links to weblogs that reference
- C/C++ XMLライブラリ from yanolab log