简述
对于 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>
<作者>一去丶二三里</作者>
<主页>http://blog.youkuaiyun.com/liang19890820</主页>
<个人说明>青春不老,奋斗不止!</个人说明>&Copyright;<![CDATA[<Qt分享&&交流>368241647</Qt分享&&交流>]]>><Empty/>
</Blog>
</