gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:23 25 4
gpt4 key购买 nike

我在xml解析问题上纠结了两天,到现在还没完:)

好吧,经过多次尝试,我最终决定在我的 C++ 应用程序中使用 Xerces-C 来解析 xml。

好吧...我尝试了 TinyXml、RapidXml 和其他...从内存分配的角度管理节点时,Xerces 的行为也相同。

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

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

考虑到由私有(private)构造函数引起的所有限制,并且我只能从 XercesDOMParser 获得 DOMDocument,并且我获得了指针,我该如何实现这一点......如果在构造函数中我这样做:

MyTree::MyTree() {
XercesDOMParser parser;
parser.parse(XMLString::transcode("<...>...</...>"));
this->_xmldoc = parser.getDocument();
}

将文档分配给 _xmldoc 后,构造函数超出范围,解析器被删除,因此它拥有的每个组件都被删除,所以我的 _xmldoc 将指向任何内容...

我该如何解决这个问题???

谢谢...

最佳答案

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

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

关于c++ - Xerces-C 上的 DOM 元素内存分配管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4679855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com