我有一个看起来像这样的
的xml文件<App>
<FileLog>
<recording id="1" name="filename1.mp3" date="123467" length="66" />
<recording id="2" name="filename2.mp3" date="123345" length="66" />
<recording id="3" name="filename3.mp3" date="123345" length="66" />
</FileLog>
</App>
我尝试使用TinyXML在最后一个录制元素(ID最高的元素)之后插入另一个录制元素。
我的代码是
string xml="C:/logs.xml";
TiXmlDocument doc(xml.c_str());
if(doc.LoadFile())
{
doc.FirstChild("FileLog");
TiXmlElement recording("recording");
recording.SetAttribute("id",4);
recording.SetAttribute("name","filenamex.mp3");
recording.SetAttribute("date",436636);
recording.SetAttribute("length",34);
doc.InsertAfterChild(recording);
}
else cout << "error loading file" << endl;
if(doc.SaveFile(xml.c_str())){
cout << "file saved succesfully.\n";
}
else cout << "error saving file" << endl;
我没有得到我想要的输出。如何让它始终在最后位置输入元素?
答案 0 :(得分:1)
嗯,根据文档,文档的第一个孩子是App
,而不是FileLog
(你也没有存储结果)。以下内容应该有效:
if (doc.LoadFile()) {
TiXmlHandle docHandle(&doc);
TiXmlElement* fileLog = docHandle.FirstChild("App").FirstChild("FileLog").ToElement();
if (fileLog) {
TiXmlElement recording("recording");
recording.SetAttribute("id", 4);
recording.SetAttribute("name", "filenamex.mp3");
recording.SetAttribute("date", 436636);
recording.SetAttribute("length", 34);
fileLog->InsertEndChild(recording);
}
}
请注意,对于TiXmlHandle
,您无需担心其间存在子节点 - 您只需要在最后检查。