我在 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 将指向任何内容......
我怎么解决这个问题???
谢谢...