DOM要素Xerces-Cのメモリ割り当て管理
-
10-10-2019 - |
質問
XMLの解析の問題に苦労するのは2日間で、まだ終わっていません:)
さて、多くのトリルの後、私はついにXerces-Cを使用してC ++アプリケーションでXMLを解析することにしました。
まあ...私はTinyXML、rapidXMLなどを試しました.... Xercesも、メモリ割り当ての観点でノードを管理するときに同じように振る舞います。
まあ、ドメレメント、ドメドキューム、ドムノードteyはすべてプライベートコンストラクトクラスです...私はそれが解析時に最高のパフォーマンスを確保するためであることを知っていますが、クラス間でノードを管理しようとすると本当に悪いことが得られます。
この問題があります。 XMLドキュメント(私が望むすべてのノードがあり、自由にナビゲートできるDOMオブジェクトを保存するクラスを作成したいと思います。 )。さて、このオブジェクトは私のクラスのメンバーです。クラスで関数を使用して、このDOMツリーを時間内に成長させたい...内部的にはツリーを保持し、ファイルに印刷したいとき。これが私がやりたいことです。私はそれが奇妙に思えることを知っていますが、これが私の要件です。私はそうしなければなりません、他のすべての解決策は考慮されるべきではありません...ごめんなさい。 (これが実装である理由をお伝えする必要がありますが、時間がかかります)。
これをコードで表現すると、次の行は私が達成したいことの表現です。
class MyTree {
public:
MyTree();
^MyTree(); // It is a tilde :)
// Methods
void AddToTree(std::string el); // Adds a new node somewhere in the DOM
std::string GetTree(); // Inserts the tree in a string
private:
DOMDocument _xmldoc;
};
プライベートコンストラクターによって引き起こされたすべての制限を考慮し、Xercesdomparserからのみdomdocumentを取得できることを考慮してください。
MyTree::MyTree() {
XercesDOMParser parser;
parser.parse(XMLString::transcode("<...>...</...>"));
this->_xmldoc = parser.getDocument();
}
_xmldocにドキュメントを割り当てた後、コンストラクター関数は範囲外になり、パーサーが削除されるため、すべてのコンポーネントが所有するため、_xmldocは何も指しません...
どうすればこの問題を解決できますか?
ありがとうございました...
解決
パーサーを維持する必要があります。引数として(参考までに)それを渡すか、それをのメンバーにする MyTree
(繰り返しますが、参照として)、またはシングルトンクラスに入れます。
(_xmldoc
ところで、ポインターである必要があります。)