DOM元素Xerces-C上的内存分配管理

时间:2011-01-13 12:12:19

标签: c++ xml dom xml-parsing xerces-c

我已经有两天的时间来解决xml解析问题,但它还没有完成:)

好吧,经过多次调查后,我终于决定使用Xerces-C来解析我的c ++应用程序中的xml。

嗯......我尝试了TinyXml,RapidXml和其他......在内存分配的角度管理节点时,Xerces的行为方式也相同。

嗯,DOMElement,DOMDocument,DOMNode都是私有构造类...我知道它是为了确保解析时的最佳性能,但是在尝试管理类之间的节点时,它确实是一件坏事。

我有这个问题。 我想创建一个存储xml文档的类(一个DOM对象,它包含我想要的所有节点,我可以自由导航,所以它不是字符串var,而是DOM obj,我想DOMElement / DOMDocument是好的)。好吧,这个对象是我班上的一员。在我的类中使用函数我想让这个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将指向什么......

我该如何解决这个问题?

谢谢...

1 个答案:

答案 0 :(得分:2)

你需要保持解析器。将其作为参数传递(通过引用),使其成为MyTree的成员(再次作为参考),或将其放在单例类中。

_xmldoc应该是一个指针,顺便说一句。)