我已经有两天的时间来解决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将指向什么......
我该如何解决这个问题?
谢谢...
答案 0 :(得分:2)
你需要保持解析器。将其作为参数传递(通过引用),使其成为MyTree
的成员(再次作为参考),或将其放在单例类中。
(_xmldoc
应该是一个指针,顺便说一句。)