<?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()访问当前节点的内容
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、实现效果如下