创建新的Element崩溃后,TinyXml2 XMLDocument解析

时间:2016-12-25 03:05:36

标签: c++ xml tinyxml tinyxml2 tinyxml++

在TinyXmlv1中,我可以创建一个临时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;
}

我无法理解它崩溃的原因。

1 个答案:

答案 0 :(得分:0)

它不是&#34;崩溃&#34;但是来自tinyxml2的class SomeForm extends Component { handleSubmit(e){ if (e.target.input.files.length) { const upload_file = e.target.input.files[0]; const formData = new FormData(); formData.append('file', upload_file); const request = axios.post(this.props.cfg_url+'/upload', formData) .then(function(response){ console.log('successfully uploaded', upload_file); }); } else { console.log('You need to select a file'); } } render(){ return( <Form inline onSubmit={this.handleSubmit}> <FormGroup controlId='uploadFormId'> <ControlLabel>Upload File:</ControlLabel> <FormControl type='file' name="input-file" label='File' /> </FormGroup> <Button type='submit'>Upload</Button> </Form> ); } } ,因为你是&#34;扔掉&#34; assert。您在newElem newElem内创建了XMLDocument,但doc只是&#34;浮动&#34;作为未跟踪的节点,直到您将其插入newElem内的特定位置。调用XMLDocument会清除Parse删除所有当前节点,XMLDocument只是删除未跟踪节点的通知。

调用其中一个assert方法,在适当的位置向文档中添加元素。并且,在您的情况下,在创建子元素之前,将调用移至XMLNode::Insert...以创建文档元素(Parse)。

E.g。

<TAGS>

My tinyxml2 extension提供了一个方便的帮助函数(#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; } )来在单个操作中创建和插入元素。