主要接口:

1、TokenType QXmlStreamReader::readNext()

功能:读取下一个标记,并返回其类型。

主要的类型有:

enum QXmlStreamReader::TokenType

This enum specifies the type of token the reader just read.

Constant

Value

Description

QXmlStreamReader::NoToken

0

The reader has not yet read anything.

QXmlStreamReader::Invalid

1

An error has occurred, reported in error() and errorString().

QXmlStreamReader::StartDocument

2

The reader reports the XML version number in documentVersion(), and the encoding as specified in the XML document in documentEncoding(). If the document is declared standalone, isStandaloneDocument() returns true; otherwise it returns false.

QXmlStreamReader::EndDocument

3

The reader reports the end of the document.

QXmlStreamReader::StartElement

4

The reader reports the start of an element with namespaceUri() and name(). Empty elements are also reported as StartElement, followed directly by EndElement. The convenience function readElementText() can be called to concatenate all content until the corresponding EndElement. Attributes are reported in attributes(), namespace declarations in namespaceDeclarations().

QXmlStreamReader::EndElement

5

The reader reports the end of an element with namespaceUri() and name().

QXmlStreamReader::Characters

6

The reader reports characters in text(). If the characters are all white-space, isWhitespace() returns true. If the characters stem from a CDATA section, isCDATA() returns true.

QXmlStreamReader::Comment

7

The reader reports a comment in text().

QXmlStreamReader::DTD

8

The reader reports a DTD in text(), notation declarations in notationDeclarations(), and entity declarations in entityDeclarations(). Details of the DTD declaration are reported in in dtdName(), dtdPublicId(), and dtdSystemId().

QXmlStreamReader::EntityReference

9

The reader reports an entity reference that could not be resolved. The name of the reference is reported in name(), the replacement text in text().

QXmlStreamReader::ProcessingInstruction

10

The reader reports a processing instruction in processingInstructionTarget() and processingInstructionData().

2、bool QXmlStreamReader::atEnd() const

功能:判断是否已经读到XML文件的末尾,如果是,则返回true,否则返回false.

3、QXmlStreamAttributes QXmlStreamReader::attributes() const

功能:返回StartElement.的属性。

4、QStringRef QXmlStreamReader::name() const

功能:返回StartElement, EndElement的名称。

5、void QXmlStreamReader::raiseError(const QString &message = QString())

功能:提出一个错误,

需求:

使用QXMLStreamReader,读取XML文件,并使用XML文件初始化树形控件。

效果图:

源码:

main.cpp

#include <QApplication>
#include <QTreeWidget>
#include <QLabel>
#include <QHeaderView>
#include <QObject>
#include "xmlstreamreader.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);QTreeWidget *tree = new QTreeWidget;tree->setHeaderLabels( QStringList()<<"Term"<<"Pages"<<"Description" );tree->header()->setSectionResizeMode(QHeaderView::Stretch);tree->setWindowTitle(QObject::tr("XML Reader"));tree->show();QString fileName("in1.xml");XMLStreamReader w(tree);w.readFile(fileName);return a.exec();
}

XMLStreamReader.h

#ifndef XMLSTREAMREADER_H
#define XMLSTREAMREADER_H#include <QXmlStreamReader>
#include <QTreeWidget>
#include <QTreeWidgetItem>class XMLStreamReader
{public:XMLStreamReader(QTreeWidget *tree);~XMLStreamReader();bool readFile(const QString &fileName);private:void readBookindexElement();void readEntryElement(QTreeWidgetItem *parent);void readPageElement(QTreeWidgetItem *parent);void skipUnknownElement();QTreeWidget *treeWidget;QXmlStreamReader reader;
};#endif // XMLSTREAMREADER_H

XMLStreamReader.cpp

#include <QFile>
#include <QDebug>
#include "xmlstreamreader.h"XMLStreamReader::XMLStreamReader(QTreeWidget *tree)
{treeWidget = tree;
}XMLStreamReader::~XMLStreamReader()
{delete treeWidget;
}bool XMLStreamReader::readFile(const QString &fileName)
{QFile file(fileName);if(!file.open(QFile::ReadOnly | QFile::Text)){qDebug()<<"Open XML file Error";return false;}reader.setDevice(&file);while(!reader.atEnd()){if(reader.isStartElement()){if(reader.name() == "bookindex"){readBookindexElement();}else{Q_ASSERT(reader.isStartElement() && (reader.name() == "bookindex")); //断言reader.raiseError(QObject::tr("Not a BookIndex file"));}}else{reader.readNext();}}file.close();if(reader.hasError()){qDebug()<<reader.errorString();return false;}else if(file.error() != QFile::NoError){qDebug()<<file.errorString();return false;}return true;
}void XMLStreamReader::readBookindexElement()
{reader.readNext();while(!reader.atEnd()){if(reader.isEndElement()){reader.readNext();break;}if(reader.isStartElement()){if(reader.name() == "entry"){readEntryElement(treeWidget->invisibleRootItem());}else{skipUnknownElement();}}else{reader.readNext();}}
}void XMLStreamReader::readEntryElement(QTreeWidgetItem *parent)
{QTreeWidgetItem *item = new QTreeWidgetItem(parent);item->setText(0,reader.attributes().value("term").toString());item->setText(2,reader.attributes().value("description").toString());reader.readNext();while(!reader.atEnd()){if(reader.isEndElement()){reader.readNext();break;}if(reader.isStartElement()){if(reader.name() == "entry"){readEntryElement(item);}else if(reader.name() == "page"){readPageElement(item);}}else{reader.readNext();}}
}void XMLStreamReader::readPageElement(QTreeWidgetItem *parent)
{QString page = reader.readElementText();if(reader.isEndElement())reader.readNext();QString allPages = parent->text(1);if(!allPages.isEmpty())allPages +=", ";allPages += page;parent->setText(1,allPages);
}void XMLStreamReader::skipUnknownElement()
{reader.readNext();while(!reader.atEnd()){if(reader.isEndElement()){reader.readNext();break;}if(reader.isStartElement()){skipUnknownElement();}else{reader.readNext();}}
}

Qt: QXMLStreamReader,读XML文件实例相关推荐

  1. 02_Android写xml文件和读xml文件

     新建Android项目 编写AndroidManifest.xml,使本Android项目具有单元测试功能和写外设的权限. <?xml version="1.0" en ...

  2. Qt DOM读写XML文件

    QXmlStreamReader:一种快速的基于流的方式访问良格式 XML 文档,特别适合于实现一次解析器(所谓"一次解析器",可以理解成我们只需读取文档一次,然后像一个遍历器从头 ...

  3. Qt:解析xml文件

    XML 什么事XML文件 XML,可扩展标记语言(Extensible Markup Language),是一种标记语言.一般用 于数据存储.配置文件存储,(Qt的ui文件就是xml)也可以跨平台跨语 ...

  4. Qt编程之Xml文件的读取

    目录 一.xml的格式说明 二.QT中读取xml的类与常用函数 三.代码思路 四.代码实现 五.结果展示 XML最主要的功能是数据传输,有的时候可以当一个小型的数据库来使用,因为其定义标签高度自由,所 ...

  5. TinyXML-2 读 XML 文件

    要读的XML文件 示例代码 #include <iostream> #include "tinyxml2.h"using namespace std; using na ...

  6. python读xml文件生成.h头文件_Python创建xml文件示例

    Python创建xml文件示例 这里有新鲜出炉的 Python 入门,程序狗速度看过来! Python 编程语言 Python 是一种面向对象.解释型计算机程序设计语言,由 Guido van Ros ...

  7. 使用tinyxml读xml文件信息到结构体

    下载TinyXML的网址:http://www.grinninglizard.com/tinyxml/ 使用TinyXML只需要将其中的6个文件拷贝到项目中就可以直接使用了,这六个文件是:tinyxm ...

  8. python读xml文件生成头文件_Python根据指定文件生成XML的方法

    因项目需要根据指定格式的文件生成XML标注文件,可以方便使用LabelImg打开进行编辑和查看.其原始文件默认使用逗号进行分隔,如下所示: 第1个值:原始图片中切图小文件,以AIpng_x,其中x代表 ...

  9. DOM方式解析XML文件实例

    books.XML文件: <?xml version="1.0" encoding="utf-8"?> <bookstore>      ...

最新文章

  1. nginx大量TIME_WAIT的解决办法(转载)
  2. 前端页面如何引入公用的页面header和footer
  3. C++中 何时用. 何时用-」
  4. PE关于导入表(IAT)知识复习
  5. 自然语言处理----处理原始文本
  6. SpringCloudGateway静态路由配置
  7. echarts大屏模板_完整的可视化大屏分享,科技感十足,各行业直接就能用
  8. 按钮3D分层悬停效果
  9. webservice学习01:wsdl文档结构
  10. 0宽字符加密_vulnhub实战靶场攻略:Breach 1.0
  11. 设定谷歌为默认浏览器
  12. Android内容提供者(群发短信)
  13. aes解密流程图_aes流程图(apqp五个阶段流程图)
  14. 射影几何----帕普斯定理的证明
  15. 计算机cpu执行时间 指令条数的单位,计算机原理2015年10月真题(02384)
  16. dubbo中bugger集
  17. [高等数学]--曲率,曲率半径-
  18. 五万字 | Hive知识体系保姆级教程
  19. rust油桶用什么打_文明重启油桶获取使用攻略_文明重启油桶怎么获取和使用_玩游戏网...
  20. 将字符串中的小写字母转换成大写字母

热门文章

  1. IPv4地址的结构体与网络字节序
  2. 2020年中国德化陶瓷博览会暨茶具文化节隆重举行—五洲御瓷分会场精品荟萃
  3. Java写的十六进制转十进制和Ascii工具
  4. 混迹在腾讯微博的知名站长名单(截至4月28日)
  5. IOS苹果手机背景音乐不能自动播放问题
  6. 电信云堤·抗D(电信云堤清洗高防服务器)提供超强T级DDoS处理能力
  7. omniplan导出html,OmniPlan 3.14.4 最NB的项目管理流程软件
  8. 爆路径写后门拿shell的一些姿势
  9. Vue中 路由导航守卫(全局守卫、路由独享守卫、组件内守卫)
  10. 强联通分量与双连通分量