Qt 实现读写xml

2 篇文章 0 订阅

目录

定义

用途

写入效果

核心代码


定义


XML(Extensible Markup Language)即可扩展标记语言。
标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。

用途


XML设计用来传送及携带数据信息,不用来表现或展示数据,HTML则用来表现数据,所以XML用途的焦点是它说明数据是什么,以及携带数据信息。
(摘自维基百科)

熟悉对xml的操作,在项目开发中非常重要。
qt中提供了几种类可以对xml进行处理。本次介绍的是QXmlStreamWriter和QXmlStreamReader。
一种通过流来处理xml的方式。

写入效果

核心代码

引入

#include <QXmlStreamWriter>
#include <QXmlStreamReader>

​//写
void XmlHandle::xmlWrite(const QStringList &elements)
{
	QFile file(_filePath);
	file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text);
	_xmlWriter.setDevice(&file);
	_xmlWriter.setAutoFormatting(true);
	_xmlWriter.writeStartDocument();

	_xmlWriter.writeStartElement("root");	//root
	//写数据
	for (auto element: elements)
	{
		QStringList listParam = element.split(",");
		if (listParam.size() == XML_Node_Num)
		{
			QString name = listParam[0];
			QString type = listParam[1];

			_xmlWriter.writeStartElement("Info");	//Info	

			_xmlWriter.writeAttribute("Name", name);
			_xmlWriter.writeAttribute("Type", type);

			_xmlWriter.writeEndElement();	//Info
		}
	}
	_xmlWriter.writeEndElement();	//root
	_xmlWriter.writeEndDocument();
	file.close();
}

​
//读
QVector<Info> XmlHandle::xmlRead()
{
	QVector<Info> vecInfo;

	QFile file(_filePath);
	file.open(QIODevice::ReadOnly | QIODevice::Text);
	if (file.exists())
	{
		_xmlReader.setDevice(&file);
		while (!_xmlReader.atEnd())
		{
			QXmlStreamReader::TokenType type = _xmlReader.readNext();
			if(type==QXmlStreamReader::StartDocument)
				continue;
			if (type == QXmlStreamReader::StartElement)
			{
				QString name = _xmlReader.name().toLatin1();
				if (name == "root")
					continue;
				else if (name == "Info")
				{
					Info info;

					QString name = _xmlReader.attributes().value("Name").toLatin1();
					int type = _xmlReader.attributes().value("Type").toInt();

					info.name = name;
					info.type = type;
		
					vecInfo.append(info);
				}
			}
		}
	}
	file.close();
	return vecInfo;
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值