它已經兩天,我對XML解析問題的鬥爭,它仍然尚未完成:)DOM元素的內存分配管理的Xerces-C
好,很多trils後,我終於決定使用Xerces的-C在我的C++應用程序中解析xml。
嗯......我試過了TinyXml,RapidXml和其他......當從內存分配的角度來管理節點時,Xerces的行爲也同樣如此。
那麼,DOMElement,DOMDocument,DOMNode tey都是私有構造類......我知道它是爲了確保解析時的最佳性能,但在嘗試管理類之間的節點時它確實是一件壞事。
我有這個問題。 我想創建一個存儲xml文檔的類(一個DOM對象,它具有我想要的所有節點,並且可以自由導航,所以它不是字符串var,而是DOM obj,我想DOMElement/DOMDocument是好)。那麼這個對象是我班的成員。在我的類中使用函數我想讓這棵DOM Tree及時增長...在內部我保留樹,當我想要時,我將它打印到一個文件中。 這就是我想要做的。我知道這似乎很奇怪,但這是我的要求。我必須這樣做,其他解決方案不被視爲......對不起。 (我應該告訴你爲什麼這是實現的原因,但這需要很多時間)。
表達這種代碼,下面幾行是我想達到什麼樣的表示:
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文檔後,構造函數超出範圍和解析器被刪除,所以ev所以我的_xmldoc將指向什麼都沒有...
我該如何解決這個問題?
謝謝...
是的,我選擇保持解析器,我不知道這是前進的正確道路...但如果你這麼說...謝謝你。 – Andry 2011-01-13 14:51:10