Qt解析xml文件

        先来看看什么是xml.

        XML是可扩展标记语言(Extensible Markup Language,XML)缩写,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

        例如下面是一个xml格式的文件:

<?xml version="1.0" encoding="UTF-8"?>
<Msg>
	<Data id="1">
		<Number>200001</Number>
		<Name>zhangsan</Name>
		<email>zhangsan@sina.cn</email>
		<website>zhangsan.chain.com</website>
	</Data>
	<Data id="2">
		<Number>200002</Number>
		<Name>lisi</Name>
		<email>lisi@sina.cn</email>
		<website>lisi.sina.cn</website>
	</Data>
	<Data id="3">
		<Number>200003</Number>
		<Name>wangwu</Name>
		<email>wangwu@sina.cn</email>
		<website>wangwu.sina.cn</website>
	</Data>
	<Data id="4">
		<Number>200004</Number>
		<Name>zhaoliu</Name>
		<email>zhaoliu@sina.cn</email>
		<website>zhaoliu.sina.cn</website>
	</Data>
</Msg>

        第一行是 XML 声明。它定义 XML 的版本 (1.0) 和所使用的编码 UTF-8

        下面的内容是xml的节点元素内容,节点可以有属性,例如Data节点有id的属性,可以进行区分不同的Data.

        Msg是根元素,xml必须要包含根元素,Data是子元素(或者说节点,每个人的叫法不同),每个Data还可以包含子元素。

        C++ 解析xml有很多种形式,例如tinyxml, boost xml等,都可以对xml内容进行解析,Qt也提供了xml的解析方法,下面用QXmlStreamReaer来解析 。

      写代码前,需要先包含xml模块,如下图:

 

       创建一个控制台项目,hello.xml的内容就用上面的xml

       代码如下:

#include <QCoreApplication>
#include <QXmlStreamReader>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //将xml文件读取数据
    QFile file("D:/QtCreator_Project/XmlParse_01/hello.xml");

    bool isOk = file.open(QIODevice::ReadOnly | QIODevice::Text);
    if(isOk)
    {
        QXmlStreamReader reader(&file);
        //reader.setDevice(&file);  也可以使用这种形式

        while(!reader.atEnd())
        {
            //判断是否是节点的开始
            if(reader.isStartElement())
            {
                QXmlStreamAttributes attributes = reader.attributes();

                //判断是否存在属性"id"
                if(attributes.hasAttribute("id"))
                {
                    qDebug() << attributes.value("id").toString();
                }

                //判断当前节点的名字是否为Number
                if(reader.name() == "Number")
                {
                    qDebug() << reader.readElementText();
                }
                else if(reader.name() == "Name")  //判断当前节点的名字是否为Name
                {
                    qDebug() << reader.readElementText();
                }
                else if(reader.name() == "email")  //判断当前节点的名字是否为email
                {
                    qDebug() << "email = " << reader.readElementText();
                }
                else if(reader.name() == "website")  //判断当前节点的名字是否为website
                {
                    qDebug() << "website " <<  reader.readElementText();
                }
            }
            else if(reader.isEndElement() && reader.name() == "Data")  //节点结束、并且节点名字为Data(含有子节点)
            {
                qDebug() << "---------------------------------";
            }

            reader.readNext();
        }

        file.close();
    }
    else
    {
        qDebug()<<"Open file hello.xml failure";
    }

    return a.exec();
}

    运行结果如下:

        有时在解析时会出错,先可以看看是否是xml格式有问题,如果能用浏览器打开,说明xml文件没问题,再看看代码是否有问题,调试看看。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页
实付 49.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值