当前位置: 首页 > news >正文

qt xml解析与处理

一、QXMLStreamWriter

QXmlStreamWriter是Qt框架中提供的一个用于写入XML文档的类。它提供了一个简单的流API,允许开发者方便地生成符合XML规范的文档。

基本功能

  • 创建、修改和保存XML文件:使用QXmlStreamWriter,可以创建新的XML文件,修改现有的XML文件内容,并将结果保存到文件中。
  • 支持XML元素:包括节点、属性、命名空间等常见的XML元素。
  • 编码支持:默认情况下,QXmlStreamWriter以UTF-8编码XML,但可以通过setCodec()方法设置不同的编码。

常用函数:

使用方法

  1. 包含头文件:在使用QXmlStreamWriter之前,需要包含其头文件#include <QXmlStreamWriter>
  2. 设置写入设备:QXmlStreamWriter通过QIODevice来写入数据,因此需要先创建一个QIODevice对象(如QFile),并设置其为QXmlStreamWriter的写入设备。
  3. 写入XML内容:通过QXmlStreamWriter提供的各种方法,如writeStartDocument()、writeStartElement()、writeAttribute()、writeCharacters()、writeEndElement()和writeEndDocument()等,来构建XML文档的结构和内容。
  4. 关闭文件:完成写入后,应关闭QFile对象以释放资源。

二、QXmlStreamReader

QXmlStreamReader是Qt框架中的一个类,专门用于解析XML文档。它提供了一种基于流的、高效的读取XML数据的方式,特别适合处理大型XML文件或需要实时解析XML数据的场景。

常用函数

  • readNext():读取下一个标记,并返回其类型。
  • name():获取当前标记的名称(如果是元素标记)。
  • attributes():获取当前元素的属性集合(如果是StartElement)。
  • text():获取当前字符标记的文本内容(如果是Characters标记)。
  • isStartElement()isEndElement()等:判断当前标记的类型。
  • atEnd():判断是否已经读取到文档的末尾。
  • hasError():判断在解析过程中是否有错误发生。
  • errorString():获取发生的错误信息的字符串表示。

使用方法

  1. 创建对象:首先,需要创建一个QXmlStreamReader对象,并将其与要解析的XML文档关联起来。这可以通过将QFile对象(或其他QIODevice派生类的对象)传递给QXmlStreamReader的构造函数或调用setDevice()方法来实现。
  2. 读取标记:使用readNext()方法读取XML文档中的下一个标记。该方法会返回一个枚举值,表示读取到的标记类型(如StartElement、EndElement、Characters等)。
  3. 处理标记:根据readNext()返回的标记类型,使用相应的方法来获取和处理标记的信息。例如,如果读取到的是一个StartElement,可以使用name()获取元素名称,使用attributes()获取元素属性等。
  4. 循环读取:通常,会将readNext()方法放在一个循环中,直到读取到文档的末尾(atEnd()返回true)。
  5. 错误处理:在循环结束后,应检查是否有错误发生(hasError()返回true),如果有,则使用errorString()等方法获取错误信息并进行处理。

三、DEMO

output.xml

<?xml version="1.0" encoding="UTF-8"?>
<student><id id="1"><name>王维</name><age>15</age><height>165</height><weight>50</weight></id>
</student>
void createXML(const QString &fileName)
{QFile file(fileName);if(!file.open(QIODevice::WriteOnly|QIODevice::Text)){return ;}QXmlStreamWriter Writer;Writer.setDevice(&file);//获取流Writer.setAutoFormatting(true);Writer.writeStartDocument();//添加XML说明(版本号和编码信息Writer.writeStartElement("student");//写入起始元素Writer.writeStartElement("id");Writer.writeAttribute("id","1");//写入属性Writer.writeTextElement("name","王维");Writer.writeTextElement("age","15");Writer.writeTextElement("height","165");Writer.writeTextElement("weight","50");Writer.writeEndElement();//结束id元素编辑Writer.writeEndElement();//结束student元素编辑Writer.writeEndDocument();//结束整个的编辑file.close();//关闭文件
}void parseXML(const QString &fileName) {QFile file(fileName);if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {qWarning("Failed to open file.");return;}QXmlStreamReader reader(&file);while (!reader.atEnd() && !reader.hasError()){QXmlStreamReader::TokenType type = reader.readNext();if (type == QXmlStreamReader::StartDocument){qDebug()<<reader.documentVersion()<<"  "<<reader.documentEncoding();//读取版本号和编码类型continue;}else if (type == QXmlStreamReader::StartElement){qDebug() << "name:" << reader.name();//获取元素名if(reader.attributes().hasAttribute("id"))//如果有属性{qDebug() << "id:" << reader.attributes().value("id");//输出属性}}else if(type==QXmlStreamReader::EndElement)//获取结束元素{qDebug() << "end:" <<reader.name();}else if(type==QXmlStreamReader::Characters&&!reader.isWhitespace()){qDebug() << "text:" << reader.text();//读取内容}}if (reader.hasError()) {qWarning() << "XML Error:" << reader.errorString();}file.close();
}int main(int argc, char *argv[])
{QApplication a(argc, argv);createXML("output.xml");parseXML("output.xml");return a.exec();
}

qq群交流:698593923

觉得有帮助的话,打赏一下呗。。

           


http://www.mrgr.cn/news/37769.html

相关文章:

  • 使用asio 接收ps流代码并显示
  • WiFi无线连接管理安卓设备工具:WiFiADB
  • 高考技术——pandas使用
  • 指令个人记录
  • 废品回收小程序:回收更加便捷!
  • 构建5G-TSN测试平台:架构与挑战
  • 变种水仙花数 - Lily Number
  • windows@win10@Win11版本号和代号命名变迁@获取或查看windows版本号信息详情方法列举
  • C++11中智能指针以及标准模板库 My_string My_stack
  • 钉钉H5微应用Springboot+Vue开发分享
  • re轻松拆分四则运算expression(^从头匹配、(?:xxxx)非捕获组、| 交替运算符联合演习)
  • Linux下的驱动开发二
  • 修改DNS地址有什么影响
  • Excel根据一个值匹配一行数据
  • HTX DAO重磅亮相Crypto Summit 2024:强势布局CIS地区,推动全球化扩张
  • 基于大数据的亚健康人群数据分析及可视化系统
  • 玩美移动发布最新全球趋势报告,以探讨影响美妆与时尚的主要AI趋势
  • AI 智能名片 S2B2C 商城小程序源码:以客户五感体验建立信任的新路径
  • pysim-4-1.1.17 eUICC ISD-R commands
  • centos安装nginx指定pcre位置