在QT中更新XML文件

时间:2012-09-28 10:03:02

标签: xml qt xml-parsing

我有Xml文件

<root rootname="RName" otherstuff="temp">
     <somechild childname="CName" otherstuff="temp">
     </somechild>
</root>

在上面的XML中,我如何使用QT将RName更新为RN,将CName更新为CN。我正在使用QDomDocument但无法做必需的事情。

1 个答案:

答案 0 :(得分:12)

如果您分享使用QDomDocument的信息以及哪个部分确实很棘手,这将有所帮助。但在这里一般情况如何:

    正在从文件系统中读取
  • 文件;

  • 正在将文件解析为QDomDocument;

  • 正在修改文件内容;

  • 正在将数据保存回文件。

在Qt代码中:

// Open file
QDomDocument doc("mydocument");
QFile file("mydocument.xml");
if (!file.open(QIODevice::ReadOnly)) {
    qError("Cannot open the file");
    return;
}
// Parse file
if (!doc.setContent(&file)) {
   qError("Cannot parse the content");
   file.close();
   return;
}
file.close();

// Modify content
QDomNodeList roots = elementsByTagName("root");
if (roots.size() < 1) {
   qError("Cannot find root");
   return;
}
QDomElement root = roots.at(0).toElement();
root.setAttribute("rootname", "RN");
// Then do the same thing for somechild
...

// Save content back to the file
if (!file.open(QIODevice::Truncate | QIODevice::WriteOnly)) {
    qError("Basically, now we lost content of a file");
    return;
}
QByteArray xml = doc.toByteArray();
file.write(xml);
file.close();

注意,在实际应用程序中,您需要将数据保存到另一个文件,确保保存成功,然后用副本替换原始文件。