XERCES-C ++でXMLを生成する際に軽量アプローチはありますか?

StackOverflow https://stackoverflow.com/questions/6371004

  •  28-10-2019
  •  | 
  •  

質問

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

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

役に立ちましたか?

解決

あなたが探しているものは通常、ドキュメントの一部がそれらすべてを蓄積し、最後に書き出す代わりに利用可能になると書かれたストリーミングシリアル化と呼ばれます(これはDOMアプローチに伴うものです)。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top