TinyXML插入最后位置。

时间:2014-11-02 18:47:05

标签: c++ xml tinyxml

我有一个看起来像这样的

的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;

我没有得到我想要的输出。如何让它始终在最后位置输入元素?

1 个答案:

答案 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,您无需担心其间存在子节点 - 您只需要在最后检查。