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