文档详情

Qt之解析XML元素.doc

发布:2017-12-16约5.04千字共5页下载文档
文本预览下载声明
Qt之解析XML元素(QXmlStreamReader) 简述 对于 XML 的内容,通常情况下,我们只关心 XML 元素的解析。这时,可以通过 QXmlStreamReader 中的便利函数 readNextStartElement() 来实现。 简述 详细介绍 使用 更多参考 详细介绍 之前使用的方式主要使用 readNext() 来读取下一个标记,并返回对应的类型。 QXmlStreamReader xml; ... while (!xml.atEnd()) { xml.readNext(); ... // 做处理 } if (xml.hasError()) { ... // 做错误处理 } 这对于读取注释、字符、DTD、结束标签等类型比较方便。当只关心 XML 元素的解析,这时,此种方式就显得比较复杂了,下面介绍一种简单方式。 在介绍之前,先明确一个概念: 当前元素: 当前元素是匹配最近解析的开始元素的元素,其中匹配的结束元素尚未到达。当解析器到达结束元素时,当前元素将成为父元素。 下面,主要用到 QXmlStreamReader 的两个接口: bool readNextStartElement() 读取,直到当前元素的下一个开始元素。当达到开始元素时,返回 true;当达到结束元素或发生错误时,返回 false。 void skipCurrentElement() 读取,直到当前元素的结尾,跳过任何子节点。此函数对于跳过未知元素非常有用。 使用 为了便于演示,使用上节生成的格式化 XML(Blogs.xml): ?xml version=1.0 encoding=UTF-8 standalone=yes? !--纯正开源之美,有趣、好玩、靠谱。。。-- ?xml-stylesheet type=text/css href=style.css? !DOCTYPE Blogs [ !ENTITY Copyright Copyright 2016《Qt实战一二三》 !ELEMENT Blogs (Blog) !ELEMENT Blog (作者,主页,个人说明) !ELEMENT 作者 (#PCDATA) !ELEMENT 主页 (#PCDATA) !ELEMENT 个人说明 (#PCDATA) ] Blogs Version=1.0 Blog 作者一去丶二三里/作者 主页/lian主页 个人说明青春不老,奋斗不止!/个人说明Copyright;![CDATA[Qt分享交流368241647/Qt分享交流]]gt;Empty/ /Blog /Blogs 封装一个解析类 XMLReader,XMLReader.h 如下所示: #ifndef XMLREADER_H #define XMLREADER_H #include QXmlStreamReader class XMLReader { public: XMLReader(); bool read(QIODevice *device); QString errorString() const; // 错误信息 private: void readXBEL(); // 读取根元素 Blogs void readBlog(); // 读取元素 Blog void readAuthor(); // 读取元素 作者 void readHOME(); // 读取元素 主页 void readInstruction(); // 读取元素 个人说明 QXmlStreamReader xml; }; #endif // XMLREADER_H XMLReader.cpp 如下所示: #include XMLReader.h #include QDebug #define ROOT_ELEMENT Blogs #define BLOG_ELEMENT Blog #define AUTHOR_ELEMENT QString::fromLocal8Bit(作者) #define HOME_ELEMENT QString::fromLocal8Bit(主页) #define INSTRUCTION_ELEMENT QString::fromLocal8Bit(个人说明) #define VERSION_ATTRIBUTE Version XMLReader::XMLReader() { } bool XMLReader::read(QIODevice *device) { xml
显示全部
相似文档