web-dev-qa-db-ja.com

最速のC ++ XML解析ライブラリ

サイズが1MB〜45MBの何千もの.xmlファイルがあります(DTDなし)。正規表現の結果を含む個別の.xmlファイルを生成する前に、これらのXMLファイルを解析してさらに操作する必要があります。

C++用の最速のオープンソースXML解析ライブラリは何ですか?解析ライブラリのほかに、XML解析を高速化するために使用できる他のアプローチは何ですか?

2
A T

RapidXmlは、使いやすさ、移植性、妥当なW3C互換性を維持しながら、可能な限り最速のXMLパーサーを作成する試みです。これは、最新のC++で記述されたin-situパーサーであり、解析速度は、同じデータで実行されるstrlen関数の速度に近づきます。

http://rapidxml.sourceforge.net/

多分あなたは Expat をこれと比較し始めることができますか? Expat は速度が非常に効率的であることが知られています。 RapidXmlは、Boost.PropertyTreeなどの一部のブーストライブラリのバックエンドとして使用されます。

また、コード構造の知識があるため、おそらくxml-scheme固有のアプローチの方が(おそらく)より効率的であると思います。このような主張は単なる想定ですが、興味がある場合は、xsdファイルを入力として取る CodeSynthesisがC++コードジェネレーターを提供します です。結果の解析コードは、xsdでフォーマットを定義するのに時間がかかる場合に、より役立つ可能性があります。他にも同様のツールが利用可能ですが、それは私が最後のプロジェクトで使用しているものです。これらのツールは主にxercesに基づいていますが、独立したコードを生成できます。パフォーマンスへの影響についてはわかりません。

2
Klaim

XMLパーサーまたはRegExエンジンの生の速度は、理解して保守しやすいコードを実行するより高速なプロセッサーと同じくらいの違いをもたらすでしょうか?

あなたが与えた例から、私は処理されている非常に大きなファイルを想定することができます。それでも、ライブラリの速度の比較的小さな違いに焦点を当てるのではなく、ファイルを分割して並列に処理してスループットを向上させ、複数のコアを活用する方法を見つけてみようとするのは賢明ではありません。

1
mcottle