gpt4 book ai didi

c++ - TinyXML 在最后位置插入。

转载 作者:行者123 更新时间:2023-11-28 06:36:24 26 4
gpt4 key购买 nike

我有一个看起来像这样的 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;

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

最佳答案

好吧,根据文档,文档的第一个子项是 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,您无需担心中间子节点的存在 - 您只需要在最后检查即可。

关于c++ - TinyXML 在最后位置插入。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26702989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com