Qt XML读写之 QXmlStreamReader、QXmlStreamWriter
Overview
QtXML将不再接收额外的功能。对于迭代地读取或编写XML文档(SAX),Qt建议使用Qt Core的QXmlStreamReader和QXmlStreamWriter类。这些类既易于使用,又更符合XML标准。
但是遗憾的是如果想修改更新XML文档,这个模块没有提供解决方案,还只能使用QDomDocument。
QXmlStreamReader类提供了一个快速解析器,通过一个简单的流API读取格式良好的XML。
QXmlStreamReader的典型循环是这样的:
QXmlStreamReader xml;
...
while (!xml.atEnd()) {
xml.readNext();
... // do processing
}
if (xml.hasError()) {
... // do error handling
}
头文件
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
示例
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<tag id="1" time="2002/1/1">
<name>test1</name>
<value>100</value>
<!--the first one-->
</tag>
<tag id="2" time="2019/2/2">
<name>test2</name>
<value>200</value>
</tag>
</root>
QXmlStreamReader
QString strFile("test1.xml");
QFile file(strFile);
if (!file.open(QFile::ReadOnly | QFile::Text)) {
return;
}
QXmlStreamReader reader(&file);
while (!reader.atEnd()) {
QXmlStreamReader::TokenType nType = reader.readNext();
if (nType == QXmlStreamReader::StartElement) {
QString tagStr = reader.name().toString();
qDebug() << reader.name().toString();
if (QString::compare(tagStr, QStringLiteral("tag")) == 0)
{
QXmlStreamAttributes Attributes = reader.attributes();
if (Attributes.hasAttribute("id")) {
qDebug() << Attributes.value("id").toString();
}
if (Attributes.hasAttribute("time")) {
qDebug() << Attributes.value("time").toString();
}
}
else if (QString::compare(tagStr, QStringLiteral("root")) == 0)
{
}
else
{
qDebug() << reader.readElementText();
}
}
else
{
if (reader.isStartDocument())
{
qDebug() << reader.documentVersion().toString();
qDebug() << reader.documentEncoding().toString();
}
if (reader.isComment())
{
}
}
}
QXmlStreamWriter
QFile file("test1.xml");
if (!file.open(QFile::WriteOnly | QFile::Text)) {
return;
}
QXmlStreamWriter writer(&file);
writer.setCodec("UTF-8"); // XML 编码
writer.setAutoFormatting(true); // 自动格式化
writer.writeStartDocument("1.0", true); // 开始文档(XML 声明)
writer.writeStartElement("root"); // 开始根元素
writer.writeStartElement("tag"); // 开始子元素
writer.writeAttribute("id", "1"); // 属性
writer.writeAttribute("time", "2002/1/1"); // 属性
writer.writeTextElement("name", "test1");
writer.writeTextElement("value", "100");
writer.writeComment("the first one");
writer.writeEndElement(); //结束子元素
writer.writeStartElement("tag");
writer.writeAttribute("id", "2"); // 属性
writer.writeAttribute("time", "2019/2/2"); // 属性
writer.writeTextElement("name", "test2");
writer.writeTextElement("value", "200");
writer.writeEndElement(); // 结束子元素 </Blog>
writer.writeEndElement(); // 结束根元素 </Blogs>
writer.writeEndDocument(); // 结束文档
file.close();
参考链接
qxmlstreamwriter
qxmlstreamreader
Modify an XML file QXMLStreamReader/Writer
转载请注明出处。以上只代表个人观点,引用不当或侵权请联系删除。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】