2

このアプリケーションは、処理能力とメモリが低い組み込みプラットフォームで実行されます。アプリケーションから巨大な XML を生成したい。現在、Xerces-C++ 3.1.1 を使用して DOM を構築し、XML にシリアライズしています。しかし、DOM の構築には時間がかかり、多くのメモリを消費します。

SAX は、DOM と比較して XML を解析する軽量なアプローチであることを知っています。そのように、XML を作成するための軽量なアプローチはありますか? もちろん、文字列を連結して XML を生成することもできますが、整形式の XML を生成し、それに含まれるテキストをサニタイズする必要があるため、そのアプローチは選択しませんでした。

4

1 に答える 1

1

あなたが探しているのは、通常、ドキュメントの一部を蓄積して最後に書き出すのではなく、ドキュメントの一部が利用可能になったときに書き出されるストリーミングシリアライゼーションと呼ばれます (これは DOM アプローチが必要とするものです)。

Xerces-C++ は現在、ストリーミング シリアライゼーションをサポートしていません。しかし、DOM を使用してエミュレートすることはそれほど難しくありません。データのチャンクをシリアル化する準備ができたら DOM ドキュメント フラグメントを構築し、DOMWriter API を使用してそれを書き出し、完了したら解放するという考え方です。別のチャンクの準備ができたら、上記の手順を繰り返します。その結果、完全なドキュメントを作成するために必要なメモリの一部しか使用しないアプリケーションが完成します。

C++ 用の XML データ バインディング ツールキットであるCodeSynthesis XSDでこのアプローチを使用して、大きすぎてメモリに収まらない XML ドキュメントを処理できるようにします。実際、これらすべてを簡素化するいくつかのヘルパー クラスを作成しており、examples/cxx/tree/ ディレクトリの「ストリーミング」サンプルの一部として見つけることができます (サンプル コードはパブリック ドメインなので、自由に借りてください ;- )))。

于 2011-06-20T13:41:04.030 に答える