在TinyXmlv1中,我可以创建一个temp Xml元素,然后通过
TiXmlDocument doc;
TiXmlElement * element = new TiXmlElement( "Hello" );
TiXmlText * text = new TiXmlText( "World" );
element->LinkEndChild( text );
doc.Parse("<TAGS></TAGS>"); // It OK现在,我想通过以下方式切换到TinyXmlv2:
#include "tinyxml2.h"
using namespace tinyxml2;
int main(int argc, char* argv[])
{
tinyxml2::XMLDocument doc;
tinyxml2::XMLElement* newElm = doc.NewElement("Hello");
newElm->SetText("World");
doc.Parse("<TAGS></TAGS>"); // This will crash
return 0;
}我不明白为什么它会崩溃。
发布于 2017-01-04 09:03:38
这不是一个“崩溃”,而是一个来自tinyxml2的assert,因为你正在“丢弃”newElem。您在XMLDocument doc中创建了newElem,但是在您将其插入到XMLDocument中的特定位置之前,newElem只是作为一个未跟踪的节点“浮动”。调用Parse将清除删除所有当前节点的XMLDocument,而assert只是通知正在删除未跟踪的节点。
调用其中一个XMLNode::Insert...方法,将元素添加到文档的适当位置。在本例中,在创建子元素之前,将对Parse的调用移至创建文档元素(<TAGS>)。
例如。
#include "tinyxml2.h"
using namespace tinyxml2;
int main(int argc, char* argv[])
{
XMLDocument doc;
doc.Parse("<TAGS></TAGS>");
XMLElement* newElm = doc.NewElement("Hello");
newElm->SetText("World");
doc.InsertEndChild(newElem);
return 0;
}My tinyxml2 extension提供了一个方便的帮助器函数(append_element),用于在单个操作中创建和插入元素。
https://stackoverflow.com/questions/41318390
复制相似问题