Qt编程5:使用QXmlStreamReader解析xml(简单应用)

1、准备xml文件包含内容如下:



	
		
			<xmlname>hello.xml</xmlname>
			<owner>zhj</owner>
		
		123456
		zhangjie
		[email protected]
		zhangjie.hello.cn
	
	
		789012
		haier
		[email protected]
		haier.sina.cn
	
	
		345678
		sum
		[email protected]
		sum.sina.cn
	
	
		901234
		niil
		[email protected]
		niil.sina.cn
	

 

2、QXmlStreamReader接口说明

创建一个QXmlStreamReader的类对象
通过setDevice()设置好要处理的XML文件
通过readNext()挨个读入节点,
通过isStartElement()和isEndElement()判断是节点的开始和结束.

通过name()得到当前节点名字
通过readElementText()访问当前节点的内容

通过attributes()获取含有属性的节点的属性

3、实现代码如下:

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include “QXmlStreamReader”

#include "QDebug"

#include "QFile"





MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

{

    ui->setupUi(this);



    //将xml文件读取数据

    QFile file("hello.xml");

    if(file.open(QIODevice::ReadOnly | QIODevice::Text))

    {

        //构建QXmlStreamReader对象

        QXmlStreamReader reader(&file);



        while(!reader.atEnd())

        {

            //判断是否是节点的开始

            if(reader.isStartElement())

            {

                //将属性读出:例如 id="3" age = "23">

                QXmlStreamAttributes attributes = reader.attributes();

                //判断是否存在属性"id"

                if(attributes.hasAttribute("id"))

                {

                    //将属性id追加textBrower

                    ui->textBrowser->append(QString("id:%1").arg(attributes.value("id").toString()));

                }



                //判断当前节点的名字是否为Number

                if(reader.name() == "Number")

                    ui->textBrowser->append(QString("Number:%1").arg(reader.readElementText()));

                //判断当前节点的名字是否为Name

                else if(reader.name() == "Name")

                    ui->textBrowser->append(QString("Name:%1").arg(reader.readElementText()));

                //判断当前节点的名字是否为email

                else if(reader.name() == "email")

                    ui->textBrowser->append(QString("email:%1").arg(reader.readElementText()));

                //判断当前节点的名字是否为website

                else if(reader.name() == "website")

                    ui->textBrowser->append(QString("website:%1").arg(reader.readElementText()));

            }

            //节点结束、并且节点名字为Data(含有子节点)

            else if(reader.isEndElement() && reader.name() == "Data")

            {

                ui->textBrowser->append("--------------------");

                ui->textBrowser->append("");

            }

            reader.readNext();

        }

        file.close();

    }

    else

    {

        qDebug()<<"Open file hello.xml failure";

    }



}



MainWindow::~MainWindow()

{

    delete ui;

}


4、实现效果如下

Qt编程5:使用QXmlStreamReader解析xml(简单应用)_第1张图片

 

 

 

你可能感兴趣的:(Qt基本应用)