私は自分のC++プロジェクトで使用するための、シンプルでクリーンで正しいXMLパーサーを探しています。私は自分のものを書くべきですか?
RapidXML はどうですか。 RapidXMLは、C++で書かれた非常に高速で小さなXML DOMパーサーです。これは主に、組み込み環境、コンピュータゲーム、または使用可能なメモリまたはCPUの処理能力が重視されるその他のアプリケーションを対象としています。 RapidXMLはBoost Software Licenseの下でライセンスされており、そのソースコードは自由に入手可能です。
特長
制限事項
あなたの用途に応じて、XMLデータバインディングを使うことができますか? CodeSynthesis XSD はコード合成によって開発され、GNUの下でデュアルライセンスされているC++用のXMLデータバインディングコンパイラです。 GPLと独自のライセンスXMLインスタンス仕様(XMLスキーマ)を指定すると、構文解析および直列化コードと同様に、与えられた語彙を表すC++クラスを生成します。
CodeSynthesis XSDのユニークな機能の1つは、インメモリC++/Treeとストリーム指向C++/Parserの2つの異なるXMLスキーマからC++へのマッピングのサポートです。 C++/Treeマッピングは、ツリーのようなインメモリデータ構造を持つ伝統的なマッピングです。 C++/Parserは、XMLインスタンス文書に格納されている情報を語彙固有の解析イベントの階層として表す、SAXに似た新しいマッピングです。 C++/Treeと比較して、C++/Parserマッピングは、メモリに収まらない大きなXML文書の処理、ストリーム指向の処理の実行、または既存のメモリ内表現の使用を可能にします。
pugixml - C++用の軽量でシンプルで高速なXMLパーサー非常に小さい(RapidXMLに相当)、非常に速い(RapidXMLに相当)、非常に使いやすい( RapidXMLより優れています。
TinyXMLを試してください。
TiCPP はTinyXMLの "もっとc ++"版です。
'TiCPP'は正式名称TinyXML ++の短縮形です。これはTinyXML( http://www.grinninglizard.com/tinyxml/ )へのまったく新しいインタフェースで、C++の長所の多くを使用します。テンプレート、例外、そしてはるかに優れたエラー処理。それはまたdoxygenに完全に文書化されています。このバージョンでは、以前とまったく同じ方法でインターフェースを作成したり、新しい 'ticpp'クラスを使用したりすることができます。あなたがする必要があるのはTIXML_USE_TICPPを定義することだけです。 VC 6.0、VC 7.0、VC 7.1、VC 8.0、MinGW gcc 3.4.5、およびLinuxでテストされています。 GNU gcc 3+
これを試してみてください。 http://www.applied-mathematics.net/tools/xmlParser.html
RapidXMLやPUGXMLよりも簡単で速いです。
TinyXMLは「単純なパーサー」の最悪のものです。
効率性やメモリ管理が気になる場合はTinyXMLを使用しないでください(たくさんの小さなブロックを割り当てる)。私の個人的なお気に入りは RapidXML です。
gSOAP はどうですか。それはオープンソースであり、GPLライセンスの下で自由に利用可能です。その名前にもかかわらず、gSOAPツールキットは一般的なXMLデータバインディングツールであり、CとC++のデータを自動的にXMLにバインドすることを可能にします。 XMLパーサーAPIを使用する必要はありません。データをXML形式で読み書きできるようにするだけです。あなたが本当に非常に単純なC++ XMLパーサーを本当に必要とするならば、gSOAPはやり過ぎかもしれません。しかし、gSOAPが2001年に導入されて以来、多くの産業用アプリケーションについての証言が示すように、それ以外のすべてについてはうまくいっています。
これが機能の簡単なリストです。
例えば:
class Address
{
std::string name;
std::vector<LONG64> number;
time_t date;
};
次に、上記のAddress
クラス宣言に対して "soapcpp2"を実行して、soap_read_Address
およびsoap_write_Address
XMLリーダーおよびライターを生成します。次に例を示します。
Address *a = new Address();
a = ...;
soap ctx = soap_new();
soap_write_Address(ctx, a);
soap_end(ctx);
soap_free(ctx);`
これはAddress a
オブジェクトのXML表現を生成します。ヘッダーファイル宣言にXML名前空間の詳細(ここには表示されていません)を付けて注釈を付けることによって、ツールはスキーマも生成します。これは簡単な例です。 gSOAPツールは、ポインタベースのリンク構造や(単なるツリーではなく)(周期的な)グラフさえも含む、非常に広範囲のCおよびC++データ型を処理できます。
お役に立てれば。
私はC++初心者で、このページでいくつかの異なる提案を試した後、私は pugixml が一番好きだと言わなければなりません。それは私が探していたすべてだったドキュメントと高レベルのAPIを理解するのは簡単です。
TinyXMLは単純なXML作業には最適ですが、もっと機能が必要な場合はApacheプロジェクトのXercesを試してください。その機能の詳細については、次のページにアクセスしてください。
TinyXML、そしてBoost.PropertyTreeも。後者は、すべての公式要件を満たしているわけではありませんが、非常に単純です。
私はGnome xmlパーサーが好きです。それはオープンソース(MITライセンスなので、あなたは商用製品でそれを使うことができます)、速くそしてDOMとSAXベースのインターフェースを持っています。