Qt6.5示例:QXmlStreamWriter封装XML文档

1 QXmlStreamWriter介绍

QXmlStreamWriter是一个用于写入XML文档的类,。这个类提供了一个带有简单流API的XML写入器,可以方便地生成符合XML规范的文档,QXmlStreamWriter支持节点、属性、命名空间等常见的XML元素。QXmlStreamWriter可以创建、修改和保存XML文件。

2 如何使用QXmlStreamWriter

头文件:#include <QXmlStreamWriter>

cmake:find_package(Qt6 REQUIRED COMPONENTS Core)

target_link_libraries(mytarget PRIVATE Qt6::Core)

qmake:QT += core

3 XML文档介绍

XML全称是可扩展标记语言(Extensible Markup Language),XML是标准通用标记语言(SGML)的一个子集。XML主要用于标记电子文件,使其具有结构性。它可以用来标记数据、定义数据类型,是一种允许用户定义自己的标记语言的源语言。

XML文本格式一般包含以下几部分:

声明部分:XML文件的声明部分包括XML版本号和字符集声明,格式例子:。

根元素:一般情况下XML文件中的所有元素都包含在一个根元素中。根元素是XML文件的起点。

元素:XML文件中的元素包含一个开始标记、一个结束标记和中间的数据。元素的格式:data。其中element为元素的名称,data为元素的数据。

属性:XML文件中的元素可以包含属性,属性用于描述元素的特性。属性的格式:data。其中attribute为元素的某个属性名称,对应value是属性的值,元素可以包含多个属性值。

  • XML文档示例:

以下是一份国际化翻译中文简体XML文档例子,root是根元素,root元素的Language属性值是'SimpChinese'。

root根元素包括几个Text子元素,属性Code是唯一访问的Key,Text元素文本分别是翻译的中文。

<?xml version="1.0" encoding="UTF-8"?>
<!-- 根元素 -->
<root Language='SimpChinese'>
  <Text Key='S_ADD'>新建</Text>
  <Text Key='S_DELETE'>删除</Text>
  <Text Key='S_EDIT'>编辑</Text>
  <Text Key='S_SAVE'>保存</Text>
  <Text Key='S_QUERY'>查询</Text>
  <!-- ...... -->
</root>

4 QXmlStreamWriter封装XML文档方法

  • QXmlStreamWriter构造函数:

QXmlStreamWriter支持通过文件(QIODevice)、原始数据(QByteArray)和字符串(QString)等方式封装XML文档。

// 构造函数。
QXmlStreamWriter(QIODevice *device)
QXmlStreamWriter(const QByteArray &data)
QXmlStreamWriter(const QString &data)
QXmlStreamWriter(const char * data)
  • 通过文件封装XML文档例子:

/**** 例子: ****/

#include <QFile>
#include <QXmlStreamWriter>

// 打开XML文件。
QFile file("newExample.xml");
file.open(QIODevice::WriteOnly);

// 通过QFile文件对象,创建QXmlStreamWriter对象。
QXmlStreamWriter xml_writer(&file);
xml_writer.setAutoFormatting(true);     // 设置自动格式化输出。
  • QXmlStreamWriter几个关键方法:

// 设置是否格式化输出。
void setAutoFormatting(bool)

// 开始XML文档。
void writeStartDocument()
// 开始写一个普通元素。
void writeStartElement(const QString &qualifiedName)
// 在当前元素写属性。
void writeAttribute(const QString &qualifiedName, const QString &value)

// 写一个字符串。
void writeCharacters(const QString &text)
// 写一个文本元素。
void writeTextElement(const QString &qualifiedName, const QString &text)
// 写一段注释。
void writeComment(const QString &text)

// 写元素结束。
void writeEndElement()
// 写文档结束。
void writeEndDocument()

5 QXmlStreamWriter封装XML文件完整示例

首先创建一个QFile对象,用于打开一个文件用于写入。然后,我们创建一个QXmlStreamWriter对象,并将文件设备传递给它。接下来,我们使用一系列的writeStartDocument、writeStartElement、writeTextElement和writeAttribute等函数来构建XML文档。

最后,我们使用writeEndElement和writeEndDocument来关闭元素和XML文档。

  • 示例代码:

#include <QCoreApplication>
#include <QFile>
#include <QXmlStreamWriter>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    // 打开XML文件。
    QFile file("newExample.xml");
    if (!file.open(QIODevice::WriteOnly))
    {
        return -1;    
    }
    
    QXmlStreamWriter xml_writer(&file);
    xml_writer.setAutoFormatting(true);     // 设置自动格式化输出。
    
    // 开始XML文档。
    xml_writer.writeStartDocument();
    
    // <root Language='SimpChinese'>
    xml_writer.writeStartElement("root");                    // 开始root元素。
    xml_writer.writeAttribute("Language", "SimpChinese");    // 写入一个属性。
    
    // <Text Key='S_ADD'>新建</Text>
    xml_writer.writeStartElement("Text");
    xml_writer.writeAttribute("Key", "S_ADD");
    xml_writer.writeCharacters("新建");
    xml_writer.writeEndElement();
    
    // <Text Key='S_DELETE'>删除</Text>
    xml_writer.writeStartElement("Text");
    xml_writer.writeAttribute("Key", "S_DELETE");
    xml_writer.writeCharacters("删除");
    xml_writer.writeEndElement();
    
    // <Text Key='S_EDIT'>编辑</Text>
    xml_writer.writeStartElement("Text");
    xml_writer.writeAttribute("Key", "S_EDIT");
    xml_writer.writeCharacters("编辑");
    xml_writer.writeEndElement();

    // <Text Key='S_SAVE'>保存</Text>
    xml_writer.writeStartElement("Text");
    xml_writer.writeAttribute("Key", "S_SAVE");
    xml_writer.writeCharacters("保存");
    xml_writer.writeEndElement();

    // <Text Key='S_QUERY'>查询</Text>
    xml_writer.writeStartElement("Text");
    xml_writer.writeAttribute("Key", "S_QUERY");
    xml_writer.writeCharacters("查询");
    xml_writer.writeEndElement();

    // <!--......-->
    xml_writer.writeComment("......");              // 写入一段注释。
    
    // <address>深圳</address>
    xml_writer.writeTextElement("address", "深圳"); // 写入一个文本元素
    
    xml_writer.writeEndElement();       // 结束root元素。
    xml_writer.writeEndDocument();      // 结束XML文档。
    
    file.close();    // 关闭文件。
    return 0;
}

运行这个程序将创建一个名为"newExample.xml"的XML文件。

<?xml version="1.0" encoding="UTF-8"?>
<root Language="SimpChinese">
  <Text Key="S_ADD">新建</Text>
  <Text Key="S_DELETE">删除</Text>
  <Text Key="S_EDIT">编辑</Text>
  <Text Key="S_SAVE">保存</Text>
  <Text Key="S_QUERY">查询</Text>
  <!-- ...... -->
  <address>深圳</address>
</root>

-【End】-

#想了解更多精彩内容,关注下方公众号,还有示例源码、开发工具免费下载。

喜欢本文章,记得点赞、分享、关注哦~

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天恩软件工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值