Qt读写XML文件的方法详解(含源码+注释)

首先我们来介绍一下Qt读写XML文件的基本概念。XML(Extensible Markup Language)是一种标记语言,作为一种通用性的标记语言,被广泛应用于存储和传输数据。Qt中提供了用于读写XML文件的模块QXmlStreamReader和QXmlStreamWriter。

一、QXmlStreamReader介绍

QXmlStreamReader是Qt中的一种用于读取XML文档的解析器,可以用来读取XML文件或者字符串。

1.1 基本语法

QXmlStreamReader reader(&file);// or QXmlStreamReader reader(xml_str)
while(!reader.atEnd() && !reader.hasError())
{
    QXmlStreamReader::TokenType token = reader.readNext();
    if(token == QXmlStreamReader::StartDocument) {
        // 开始读取XML文档
    } else if (token == QXmlStreamReader::StartElement) {
        // 开始读取元素
        QString name = reader.name().toString(); // 元素名字
        QXmlStreamAttributes attributes = reader.attributes(); // 所有属性
        // do something
    } else if (token == QXmlStreamReader::EndElement) {
        // 结束读取元素
        // do something
    } else if (token == QXmlStreamReader::Characters) {
        // 读取元素内容
        QString text = reader.text().toString(); // 元素内容
    }
}

1.2 示例:读取XML文件

例如,我们有以下example.xml文件:


<?xml version="1.0" encoding="UTF-8"?>
<students>
  <student id="1001">
    <name>Tom</name>
    <score>85</score>
  </student>
  <student id="1002">
    <name>Lucy</name>
    <score>90</score>
  </student>
</students>

那么我们可以对其进行读取:

QFile file("example.xml");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
    qDebug() << "Open file error";
    return;
}
QXmlStreamReader reader(&file);

while (!reader.atEnd())
{
    if (reader.tokenType() == QXmlStreamReader::StartElement)
    {
        if (reader.name() == "student")
        {
            int id = reader.attributes().value("id").toInt();
            qDebug() << "id:" << id;
        }
        else if (reader.name() == "name")
        {
            QString name = reader.readElementText();
            qDebug() << "name:" << name;
        }
        else if (reader.name() == "score")
        {
            QString score = reader.readElementText();
            qDebug() << "score:" << score;
        }
    }
    reader.readNext();
}
file.close();

1.3 示例:读取XML字符串

如果需要读取XML字符串,那么只需要调用QXmlStreamReader的构造函数即可:

QString xml_str = "<students>\
<student id=\"1001\">\
  <name>Tom</name>\
  <score>85</score>\
</student>\
<student id=\"1002\">\
  <name>Lucy</name>\
  <score>90</score>\
</student>\
</students>";
QXmlStreamReader reader(xml_str);

while (!reader.atEnd())
{
    if (reader.tokenType() == QXmlStreamReader::StartElement)
    {
        if (reader.name() == "student")
        {
            int id = reader.attributes().value("id").toInt();
            qDebug() << "id:" << id;
        }
        else if (reader.name() == "name")
        {
            QString name = reader.readElementText();
            qDebug() << "name:" << name;
        }
        else if (reader.name() == "score")
        {
            QString score = reader.readElementText();
            qDebug() << "score:" << score;
        }
    }
    reader.readNext();
}

二、QXmlStreamWriter介绍

QXmlStreamWriter是Qt中的一种用于写入XML文件的解析器,可以用来写入XML文件或者字符串。

2.1 基本语法

QFile file("example.xml"); // or QIODevice *device
QXmlStreamWriter writer(&file); // or QXmlStreamWriter writer(device)
writer.setAutoFormatting(true); // 是否自动缩进
writer.writeStartDocument(); // 写入XML头
writer.writeStartElement("students");// 开始写入元素
writer.writeAttribute("version", "1.0");// 写入属性
writer.writeTextElement("stu1", "Tom");
writer.writeTextElement("stu2", "Lucy");
writer.writeEndElement(); // 结束写入元素
writer.writeEndDocument(); // 结束写入XML文件
file.close();

2.2 示例:写入XML文件

我们可以将上面读取的example.xml文件进行修改并保存:

QFile file("students.xml");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
    qDebug() << "Open file error";
    return;
}
QXmlStreamWriter writer(&file);

writer.setAutoFormatting(true); // 自动缩进
writer.writeStartDocument(); // 写入XML头
writer.writeStartElement("students");
writer.writeStartElement("student");
writer.writeAttribute("id", "1001");
writer.writeTextElement("name", "Tom");
writer.writeTextElement("score", "85");
writer.writeEndElement();
writer.writeStartElement("student");
writer.writeAttribute("id", "1002");
writer.writeTextElement("name", "Lucy");
writer.writeTextElement("score", "90");
writer.writeEndElement();
writer.writeEndElement();
writer.writeEndDocument();
file.close();

执行上述代码后将会在本地生成students.xml文件,内容与example.xml文件相同。

2.3 示例:写入XML字符串

如果需要将写好的XML文件直接以字符串形式输出,那么可以使用QString作为中介:

QString xml_str;
QXmlStreamWriter writer(&xml_str);

writer.setAutoFormatting(true); // 自动缩进
writer.writeStartDocument(); // 写入XML头
writer.writeStartElement("students");
writer.writeStartElement("student");
writer.writeAttribute("id", "1001");
writer.writeTextElement("name", "Tom");
writer.writeTextElement("score", "85");
writer.writeEndElement();
writer.writeStartElement("student");
writer.writeAttribute("id", "1002");
writer.writeTextElement("name", "Lucy");
writer.writeTextElement("score", "90");
writer.writeEndElement();
writer.writeEndElement();
writer.writeEndDocument();

qDebug() << xml_str;

执行上述代码后将会输出生成的XML字符串:

<?xml version="1.0" encoding="UTF-8"?>
<students>
  <student id="1001">
    <name>Tom</name>
    <score>85</score>
  </student>
  <student id="1002">
    <name>Lucy</name>
    <score>90</score>
  </student>
</students>

以上就是关于Qt读写XML文件的方法详解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Qt读写XML文件的方法详解(含源码+注释) - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • 解决dotproject中文名文件下载乱码问题的解决方法

    解决dotproject中文名文件下载乱码问题的解决方法 在 dotproject 中出现中文名文件下载乱码问题的原因是因为浏览器默认使用 ASCII 编码,而中文名文件使用 UTF-8 编码。下面给出两种解决方法。 方法一:修改源代码 修改 /dotproject/classes/ui.class.php 文件,将该文件中的所有 filename= 换成 …

    html 2023年5月31日
    00
  • hbuilderx怎么加入图片?hbuilderx加入图片方法

    HBuilderX是一款非常流行的前端开发工具,如果您想要在HBuilderX中加入图片,可以按照以下步骤进行操作: 在项目中创建一个文件夹,用于存放图片。可以在HBuilderX的“文件”菜单中选择“新建文件夹”,输入文件夹名称,点击“确定”即可创建文件夹。 将图片文件拖拽到刚才创建的文件夹中。可以在文件管理器中找到需要添加的图片文件,将其拖拽到刚才创建的…

    html 2023年5月17日
    00
  • Wallpaper Engine怎么从网页打开 Wallpaper Engine网页打开方法

    以下是“Wallpaper Engine怎么从网页打开 Wallpaper Engine网页打开方法”的完整攻略: Wallpaper Engine怎么从网页打开? Wallpaper Engine是一款功能强大的动态壁纸软件,可以让用户设置各种类型的动态壁纸。在使用Wallpaper Engine时,有时需要从网页打开该软件。下面是一些关于Wallpape…

    html 2023年5月18日
    00
  • Dreamweaver网页怎么设置标记色彩?

    Dreamweaver网页怎么设置标记色彩? 在Dreamweaver中,您可以设置标记色彩来帮助您更好地识别和编辑HTML标记。以下是关于如何设置标记色彩的攻略,包括以下几个步骤: 步骤1:打开“首选项”窗口 首先,您需要打开“首选项”窗口。您可以单击“编辑”>“首选项”菜单,或者按下“Ctrl+U”键。 步骤2:选择“标记”选项卡 在“首选项”窗口…

    html 2023年5月17日
    00
  • 简单了解XML中的处理指令

    下面我将为你详细讲解“简单了解XML中的处理指令”的完整攻略。 什么是XML处理指令? XML处理指令是一些特殊的标记,用于描述XML处理器应该如何处理XML文档。处理指令通常以<? ?>这样的格式出现在XML文档的顶部。XML处理指令不是XML的一部分,不会被解析器作为文本节点处理。 处理指令的语法格式 XML处理指令的语法格式如下: <…

    html 2023年5月30日
    00
  • Java 将HTML转为XML的详细步骤

    将HTML转为XML的过程主要包括以下几个步骤: 通过Java的网络编程实现HTML的爬取 使用Jsoup库解析HTML 将解析后的HTML转化为XML 对XML进行操作,如存储、转换等 下面将通过两个示例详细讲解这个过程。 示例一: import java.io.IOException; import org.jsoup.Jsoup; import org…

    html 2023年5月30日
    00
  • 完美解决在Servlet中出现一个输出中文乱码的问题

    在Servlet中输出中文时,有时候可能会出现乱码问题,这主要是因为Servlet默认使用ISO-8859-1编码,而中文字符需要使用UTF-8或者GBK编码。本文将深入讲解完美解决这个问题的攻略。 步骤一:设置请求和响应的编码格式 在Servlet中,我们可以通过设置请求和响应的编码格式来解决中文乱码问题。我们可以在Servlet中的doGet或者doPo…

    html 2023年5月31日
    00
  • JSP学习笔记之基础语法

    下面我将为您详细讲解 “JSP学习笔记之基础语法”的完整攻略。 一、概述 JSP(Java Server Pages)是一种基于 Java 技术,用于开发动态 Web 网页的服务器端脚本语言。它可以将 Java 代码嵌入到 HTML 页面中,实现 Web 页面的动态效果,使得页面可以根据用户的请求动态改变。JSP 技术是在传统 CGI(Common Gate…

    html 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部