2

我在 xml 解析问题上苦苦挣扎了两天,但还没有完成:)

好吧,经过多次尝试,我最终决定在我的 c++ 应用程序中使用 Xerces-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 将指向任何内容......

我怎么解决这个问题???

谢谢...

4

1 回答 1

2

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

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

于 2011-01-13T13:09:23.623 回答