如何在QT中使用XML StreamReader
How to use XML StreamReader in Qt?
我有这个xml位于c:/project/setting.xml
中<?xml version='1.0'?>
<configs>
<interval>10</interval>
<size>176,144</size>
</configs>
如何链接到我的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;
}
它不会进行严格的错误检查,只是其中两个例子。您应该始终检查当前节点是否真正存在。
重要说明: dom模型的一个棘手部分是,
不给出像<interval>10</interval>
这样的节点的实际值 auto interval = configs.firstChildElement("interval");
qDebug() << interval.nodeValue();
但是
auto interval = configs.firstChildElement("interval");
qDebug() << interval.firstChild().nodeValue();
文本节点实际上是interval
节点的第一个孩子。请记住这一点。
如果要导航XML,该XML包含在同一级别上具有相同名称的几个元素,例如
<?xml version='1.0'?>
<configs>
<interval>10</interval>
<interval>100</interval>
<interval>1000</interval>
<size>176,144</size>
</configs>
您可以使用nextSiblingElement
方法获取下一个元素:
for (auto interval = configs.firstChildElement("interval");
!interval.isNull();
interval= interval.nextSiblingElement("interval")) {
// ...
}
相关文章:
- Cppcheck生成xml转储文件
- 如何在pugixml中获取节点的内部XML
- 如何使用tinyxml2从XML加载父实体和子实体
- boost xml parsingl将xml的路径作为变量发送
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 使用 Tinyxml 在 xml 中添加一个子子项
- 增强基于 XML class_id的反序列化
- 在 c++ 中使用 vtd-xml 时,如何摆脱 EOFException?
- 防止在C++中选择错误文件时提升 xml 解析器崩溃
- c++ 读取 xml 文件的内容
- 删除 XML 文件中的子节点C++
- 使用 RapidXML 更新C++中的 XML 节点和属性值
- 在Cmake构建CmakeList.txt中读取/解析XML文件
- 从 XML 中读取未指定结构的每个数据成员
- XML to XML XSLT transformation. MSXML in VBScript
- 将 QGraphicsView 或 Scene 转换为 XML/JSON
- Qt 写入 xml: QIODevice::write (QFile, "D:/logs.xml" ): 设备未打开
- 使用 libxml2 解析 XML 文件时缺少元素值
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- 如何在QT中使用XML StreamReader