Home > Tags > XML

XML

C/C++ XMLライブラリ

仕事で必要だったのでC/C++のXMLパーサーを調べてみた。以下のリストが主要なXMLパーサーらしい。JavaやC#やLLな言語だとXMLのパースもさほど大変ではないけどC/C++でやろうとすると結構厳しいですね。特にCが厳しいです。C++はライブラリも豊富でC++マスターにとってはそんなに大変そうでもないでしょうけど、やっぱC++は複雑です。5,6年ぶりくらいにC/C++に再入門いたしましたw

さて、上記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サンクス!

Home > Tags > XML

Search
Feeds
Meta

Return to page top