首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >create new Element崩溃后进行TinyXml2 XMLDocument解析

create new Element崩溃后进行TinyXml2 XMLDocument解析
EN

Stack Overflow用户
提问于 2016-12-25 11:05:36
回答 1查看 527关注 0票数 0

在TinyXmlv1中,我可以创建一个temp Xml元素,然后通过

代码语言:javascript
复制
TiXmlDocument doc;
TiXmlElement * element = new TiXmlElement( "Hello" );
TiXmlText * text = new TiXmlText( "World" );
element->LinkEndChild( text );
doc.Parse("<TAGS></TAGS>"); // It OK

现在,我想通过以下方式切换到TinyXmlv2:

代码语言:javascript
复制
#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;
}

我不明白为什么它会崩溃。

EN

回答 1

Stack Overflow用户

发布于 2017-01-04 09:03:38

这不是一个“崩溃”,而是一个来自tinyxml2的assert,因为你正在“丢弃”newElem。您在XMLDocument doc中创建了newElem,但是在您将其插入到XMLDocument中的特定位置之前,newElem只是作为一个未跟踪的节点“浮动”。调用Parse将清除删除所有当前节点的XMLDocument,而assert只是通知正在删除未跟踪的节点。

调用其中一个XMLNode::Insert...方法,将元素添加到文档的适当位置。在本例中,在创建子元素之前,将对Parse的调用移至创建文档元素(<TAGS>)。

例如。

代码语言:javascript
复制
#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),用于在单个操作中创建和插入元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41318390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档