C++ 如何在Qt中使用XML StreamReader?
我有这个XML 位于C:/project/setting.xml中C++ 如何在Qt中使用XML StreamReader?,c++,xml,qt,streamreader,C++,Xml,Qt,Streamreader,我有这个XML 位于C:/project/setting.xml中 <?xml version='1.0'?> <configs> <interval>10</interval> <size>176,144</size> </configs> 10 176,144 如何链接到我的QT项目 以及如何在我的.cpp文件中调用我的XML的间隔和大小值 谢谢。我通常更喜欢直接使用DOM文档进行阅读,而只使用
<?xml version='1.0'?>
<configs>
<interval>10</interval>
<size>176,144</size>
</configs>
10
176,144
如何链接到我的QT项目
以及如何在我的.cpp文件中调用我的XML的间隔和大小值
谢谢。我通常更喜欢直接使用DOM文档进行阅读,而只使用拖缆进行书写(
QXmlStreamWriter
)。使用<代码> QXmlStreamReader <代码>是非常费力的,因为为了最大的健壮性,你必须考虑到读者当前位置的所有可能性。如果你不介意改变阅读方法,你可以看看这个答案
Qt已经提供了如何使用DOM文档的详细说明,但是这里有一个针对当前问题的简化版本。只需将XML模块添加到Qt项目中
#include <QtXML>
bool readXML(const QString& path)
{
try {
QFile inFile(path);
if (!inFile.open(QFile::ReadOnly)) return false;
QDomDocument xml("xml");
xml.setContent(inFile.readAll());
auto configs = xml.documentElement();
if (configs.tagName() != "configs") return false;
// No error checking nor other type conversion done here
qDebug() << configs.firstChildElement("interval").firstChild().nodeValue();
qDebug() << configs.firstChildElement("size").firstChild().nodeValue();
} catch (...) {
return false;
}
return true;
}
可以使用该方法获取下一个元素:
for (auto interval = configs.firstChildElement("interval");
!interval.isNull();
interval= interval.nextSiblingElement("interval")) {
// ...
}
您看过了吗?值得一提的是,Qt不再推荐使用QtXML。正如“该模块不再进行主动维护。请改用Qt Core中的QXmlStreamReader和QXmlStreamWriter类。”有趣的是,我不知道,这很遗憾。谢谢@MrEricSir指出这一点!
auto interval = configs.firstChildElement("interval");
qDebug() << interval.firstChild().nodeValue();
<?xml version='1.0'?>
<configs>
<interval>10</interval>
<interval>100</interval>
<interval>1000</interval>
<size>176,144</size>
</configs>
for (auto interval = configs.firstChildElement("interval");
!interval.isNull();
interval= interval.nextSiblingElement("interval")) {
// ...
}