質問

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 ところで、ポインターである必要があります。)

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