您的位置:首页 > 编程语言 > Qt开发

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

2014-06-12 13:42 531 查看
1、准备xml文件包含内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Msg>
<Data id="1">
<title>
<xmlname>hello.xml</xmlname>
<owner>zhj</owner>
</title>
<Number>123456</Number>
<Name>zhangjie</Name>
<email>zhangjie@sina.cn</email>
<website>zhangjie.hello.cn</website>
</Data>
<Data id="2">
<Number>789012</Number>
<Name>haier</Name>
<email>haier@sina.cn</email>
<website>haier.sina.cn</website>
</Data>
<Data id="3">
<Number>345678</Number>
<Name>sum</Name>
<email>sum@sina.cn</email>
<website>sum.sina.cn</website>
</Data>
<Data id="4">
<Number>901234</Number>
<Name>niil</Name>
<email>niil@sina.cn</email>
<website>niil.sina.cn</website>
</Data>
</Msg>


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、实现效果如下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: