不允许我创建新标记“tinyxml 2”,这就是我使用标记“tinyxml”的原因,但我使用的是“tinyxml 2”!
我试图插入一个子树元素到一个现有的XML文件。我的问题是,在运行程序并检查XML文件后,子树根本不存在于文档中。在原始代码中,我也在加载和保存文件时检查错误,所以这些函数没有问题,它们工作正常。我尝试了几种不同的方法,也通过使用UserList.NewElement(*name*)
-函数添加了单个元素,也工作正常。现在我想从文本变量插入整个子树...
我的最新方法如下所示(简化后没有检查LoadFile
和SaveFile
):
tinyxml2::XMLDocument UserList;
UserList.LoadFile(*Path*);
const char* XMLText = "<user name=\"test-user\" gender=\"male\"><ability description=\"I_can_do_magic\" /></user>";
tinyxml2::XMLDocument TestParse;
TestParse.Parse(XMLText);
tinyxml2::XMLElement* myNewUser = TestParse.RootElement();
UserList.FirstChildElement( "magicians" )->InsertEndChild(myNewUser);
UserList.SaveFile(*Path*);
顺便说一句...当我尝试使用tinyxml2::XMLDocument UserList
解析我的XMLText
时,运行程序后保存的XML文件将为空。这意味着在尝试这样做时,既不会保存原始XML文档内容,也不会保存新解析的子树。这一事实使我使用了第二个tinyxml2::XMLDocument TestParse
。现在保存的XML文件包含其原始内容,然而,解析后的子树仍然缺失...非常感谢您的任何解决方案/帮助/建议。
3条答案
按热度按时间toe950271#
TinyXML-2在存储于XMLDocument中的内存池中为它的节点(XMLNode)分配内存。这解决了TinyXML-1中存在的内存碎片问题。
副作用是元素不能从一个XMLDocument移动到另一个XMLDocument,只能复制。遗憾的是,TinyXML-2目前不支持深度复制(树复制),所以不能做你想做的事情。(尽管github站点要求深度复制。)
顺便说一句,我希望您编写的代码Assert(在调试模式下)或崩溃,因为myNewUser与UserList位于不同的内存池中。
c8ib6hqw2#
我使用TinyXML-2的XMLVisitor编写了一个深度复制函数,希望这对您有用:
bejyjqdl3#
截至今日: