2011-01-13 59 views
2

它已經兩天,我對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將指向什麼都沒有...

我該如何解決這個問題?

謝謝...

回答

2

你需要保持解析器。將它作爲參數傳遞(通過引用),使其成爲MyTree(再次,作爲參考)的成員,或將其放入單例類中。

_xmldoc應該是一個指針,順便說一句。)

+0

是的,我選擇保持解析器,我不知道這是前進的正確道路...但如果你這麼說...謝謝你。 – Andry 2011-01-13 14:51:10