一、简述
XML是一种标记语言,被设计用来结构化存储以及传输信息,是一种常用的文档数据结构。
就我个人而言,Qt下读写XML格式文件可以有三种方法:
一是使用纯C++的rapidxml开源库。优点是速度快,媲美strlen()的速度;缺点是处理中文比较麻烦,编码只有ANSI格式。
二是使用QXmlStreamReader类,适当结合QXmlQuery类。优点是灵活性强,节约内存;缺点是理解起来相对较难,还需要一点数据库语言的知识。
三是使用QDomDocument类。是Qt下读写xml文件传统而普遍的做法,缺点就是如果读写的文件很大,会消耗大量的内存空间(必须包含Qt XML模块)。
QDomDocument类可以理解为一个QFile,这个类的对象代表了整个文件,通常也是一个xml文件的主节点。还需使用到的类有QDomNode(节点基类)、QDomElement(节点类)、QDomText(内容)、QDomAttr(属性)、QDomProcessingInstruction(文件头)。
三、读写样式
<?xml version='1.0' encoding='utf-8'?>
<日销售清单>
<日期 date="2020-05-29">
<时间 time="21:27:41">
<厂家>二汽神龙</厂家>
<品牌>毕加索</品牌>
<报价>39</报价>
<数量>1</数量>
<金额>50</金额>
</时间>
<时间 time="21:27:51">
<厂家>二汽神龙</厂家>
<品牌>毕加索</品牌>
<报价>39</报价>
<数量>1</数量>
<金额>50</金额>
</时间>
<时间 time="21:27:57">
<厂家>二汽神龙</厂家>
<品牌>毕加索</品牌>
<报价>39</报价>
<数量>1</数量>
<金额>50</金额>
</时间>
</日期>
</日销售清单>
头文件
#ifndef DOCXML_H
#define DOCXML_H
#include <QString>
#include <QStringList>
#include <QDomDocument>
#include <QDomElement>
class DocXml
{
public:
DocXml();
static void CreateXml(const QString &filePath); //创建xml 空文件
static void AppendXml(const QString &filePath,QStringList list);
static void WriteXml(QDomDocument &doc,QDomElement &root,QStringList &list);
static void ReadXml(const QString &filePath,QStringList &fList,
QStringList &bList, QStringList &pList,
QStringList &nList, QStringList &tList);
};
#endif // DOCXML_H
创建空的XML文件
#include "docxml.h"
#include <QFile>
#include <QDomDocument> //文件
#include <QDomProcessingInstruction> //格式头部
#include <QDomElement> //元素
#include <QTextStream>
#include <QDebug>
#include <QDateTime>
#define cout qDebug() << "[" << __FILE__ << ":" << __LINE__ &