250

C++プロジェクトで使用するシンプルでクリーンな正しいXMLパーサーを探しています。自分で書くべきですか?

4

12 に答える 12

122

RapidXMLはどうですか?RapidXML は、C++ で書かれた非常に高速で小さな XML DOM パーサーです。これは主に、組み込み環境、コンピューター ゲーム、または利用可能なメモリや CPU 処理能力が重視されるその他のアプリケーションを対象としています。RapidXML は Boost Software License の下でライセンスされており、そのソース コードは自由に利用できます。

特徴

  • 解析速度 (DOM ツリーの構築を含む) は、同じデータに対して実行される strlen 関数の速度に近づきます。
  • 最新の CPU (2008 年現在) では、パーサーのスループットは 1 秒あたり約 10 億文字です。オンライン マニュアルのパフォーマンス セクションを参照してください。
  • コードと作成された DOM ツリーの小さなメモリ フットプリント。
  • 統合プロセスを簡素化するヘッダーのみの実装。
  • 商用、非商用を問わず、ほぼすべての目的で使用できるシンプルなライセンスで、義務はありません。
  • UTF-8 および部分的に UTF-16、UTF-32 エンコーディングをサポートします。
  • C++ 標準ライブラリの非常に小さなサブセットを除いて、依存関係のないポータブル ソース コード。
  • このサブセットは非常に小さいため、標準ライブラリを使用したくない場合は手動で簡単にエミュレートできます。

制限事項

  • パーサーは DOCTYPE 宣言を無視します。
  • XML 名前空間はサポートされていません。
  • パーサーは、文字の有効性をチェックしません。
  • パーサーのインターフェースは DOM 仕様に準拠していません。
  • パーサーは、属性の一意性をチェックしません。

ソース: wikipedia.org://Rapidxml


使い方によっては、XML データ バインディングを使用できますか? CodeSynthesis XSDは、Code Synthesis によって開発された C++ 用の XML データ バインディング コンパイラであり、GNU GPL およびプロプライエタリ ライセンスの下でデュアル ライセンスが付与されています。XML インスタンス仕様 (XML スキーマ) を指定すると、指定された語彙を表す C++ クラスと、解析およびシリアル化コードが生成されます。

CodeSynthesis XSD のユニークな機能の 1 つは、2 つの異なる XML スキーマから C++ へのマッピング (インメモリ C++/ツリーとストリーム指向の C++/パーサー) のサポートです。C++/ツリー マッピングは、ツリーに似たインメモリ データ構造を持つ従来のマッピングです。C++/Parser は、XML インスタンス ドキュメントに格納されている情報をボキャブラリ固有の解析イベントの階層として表す、SAX に似た新しいマッピングです。C++/Tree と比較して、C++/Parser マッピングを使用すると、メモリに収まらない大きな XML ドキュメントを処理したり、ストリーム指向の処理を実行したり、既存のメモリ内表現を使用したりできます。

ソース: wikipedia.org://CodeSynthesis XSD

于 2008-10-04T19:49:20.970 に答える
109

pugixml - C++ 用の軽量でシンプルで高速な XML パーサー. 非常に小さく (RapidXML に匹敵), 非常に高速 (RapidXML に匹敵), 非常に使いやすい ( RapidXML より優れている).

于 2010-08-01T03:27:40.743 に答える
42

TinyXMLをお試しください。

http://sourceforge.net/projects/tinyxml

于 2008-10-04T17:22:55.897 に答える
16

TiCPPは、TinyXML の「より C++」なバージョンです。

「TiCPP」は正式名称 TinyXML++ の略です。これは TinyXML ( http://www.grinninglizard.com/tinyxml/ ) への完全に新しいインターフェイスであり、C++ の長所の多くを使用します。テンプレート、例外、およびはるかに優れたエラー処理。また、doxygen にも完全に文書化されています。このバージョンでは、以前とまったく同じ方法で tiny をインターフェイスできるため、または新しい「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+ でテスト済みです。

于 2008-10-04T18:27:22.040 に答える
14

これを試してみてください:http: //www.applied-mathematics.net/tools/xmlParser.htmlRapidXML
やPUGXMLよりも簡単で高速です。
TinyXMLは、「単純なパーサー」の中で最悪のものです。

于 2010-08-18T09:55:15.687 に答える
12

効率/メモリ管理が心配な場合は、TinyXML を使用しないでください (多くの小さなブロックを割り当てる傾向があります)。私の個人的なお気に入りはRapidXMLです。

于 2008-10-04T19:48:09.303 に答える
10

gSOAPはどうですか?これはオープン ソースであり、GPL ライセンスの下で自由に利用できます。その名前にもかかわらず、gSOAP ツールキットは汎用の XML データ バインディング ツールであり、C および C++ データを XML に自動的にバインドできます。XML パーサー API を使用する必要はありません。データを XML 形式で読み書きできるようにするだけです。非常に単純な C++ XML パーサーが本当に必要な場合は、gSOAP はやり過ぎかもしれません。しかし、gSOAP が 2001 年に導入されて以来、多くの産業用アプリケーションの証言が示すように、他のすべての点ではうまく機能しています。

機能の簡単なリストは次のとおりです。

  • ポータブル: Windows、Linux、Mac OS X、Unix、VxWorks、Symbian、Palm OS、WinCE など。
  • フットプリントが小さい: XML Web サービス クライアント アプリを実装するための 73KB のコードと 2K 未満のデータ (メモリ使用量を制限するための DOM はありません)。
  • 高速: 他のツールの主張を信じないでください。実際の速度はI/Oで測定する必要があります。gSOAP の場合、TCP/IP 経由の往復 XML メッセージは 3000 を超えます。XML 解析のオーバーヘッドは、シリアル化 (非) 化が行われている間の入出力の単純な線形スキャンであるため、無視できます。
  • XML サポート: XML スキーマ (XSD) のインポート/エクスポート、WSDL のインポート/エクスポート、XML 名前空間、XML の正規化、添付ファイル付きの XML (MIME)、DOM のオプションの使用、インデント付きの XML を生成するための多くのオプション、UTF8 文字列の使用など。
  • XML 検証: 部分的および完全 (オプション)
  • WS サポート: WS-Security、WS-ReliableMessaging、WS-Addressing、WS-Policy、WS-SecurityPolicy など。
  • デバッグ: リーク検出、ロギングを備えた統合メモリ管理。
  • API: 学習する API はなく、"soap" エンジン コンテキストの初期化のみを行い、データに対して読み取り/書き込みインターフェイスを使用し、"soap" エンジン コンテキストを破棄します。

例えば:

class Address
{ 
  std::string name;
  std::vector<LONG64> number;
  time_t date;
};

Address次に、上記のクラス宣言で「soapcpp2」を実行してsoap_read_Addresssoap_write_AddressXML リーダーとライターを生成します。次に例を示します。

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++ データ型を処理できます。

お役に立てれば。

于 2010-05-12T19:23:11.380 に答える
9

TinyXMLは単純なXML作業に最適ですが、より多くの機能が必要な場合は、apacheプロジェクトのXercesを試してください。その機能の詳細については、次のページにアクセスしてください。

http://xerces.apache.org/xerces-c/

于 2008-10-04T17:30:15.960 に答える
9

TinyXML、および Boost.PropertyTree も含まれます。後者はすべての公式要件を満たしているわけではありませんが、非常に単純です。

于 2008-10-04T18:49:23.493 に答える
9

私は C++ の初心者であり、このページでいくつかの異なる提案を試した後、pugixmlが最も気に入っていると言わざるを得ません。理解しやすいドキュメントと、私が探していた高レベルの API がすべて揃っています。

于 2010-09-09T11:45:13.633 に答える
7

Gnome xml パーサーが気に入っています。オープン ソース (MIT ライセンスなので、商用製品で使用できます) であり、高速で、DOM および SAX ベースのインターフェイスを備えています。

http://xmlsoft.org/

于 2008-10-04T17:59:51.347 に答える
2

TinyXMLまたはIrrXMLを試してください...どちらも軽量のXMLパーサーです(とにかく、TinyXMLを使用することをお勧めします)。

于 2008-10-04T17:27:05.453 に答える