目录
XML最主要的功能是数据传输,有的时候可以当一个小型的数据库来使用,因为其定义标签高度自由,所以在一些软件需要经常修改的配置变量常常采用xml格式的文件来保存,在需要用到该变量时在事先写好的xml类型文件中进行修改。
本篇博客给出的代码从如何完整读出一个xml文件的思路出发。
逻辑难度不大,但需要读者耐心琢磨。方能写出一个属于自己的读取xml的通用函数。
如果读者对xml格式已经如数家珍,请跳过xml的格式说明,直接进入思路分析
一、xml的格式说明
1.xml的头声明在语法上可有可无,但标准化的书写规范要求一定要有头声明
<?xml version = "1.0" encoding = "utf-8"?>
需要注意的是头声明的前后一定要有问号(?) ,否则在读取xml文件时会无法读取这条语句而造成读取失败。
2.xml有一个根节点,此处我们定义为root,需要强调的是任意节点都可以自定义,其标签定义是高度自由的。
<?xml version = "1.0" encoding = "utf-8"?>
<root>
<user>章鱼</user>
<homeland id= "1">中国</homeland>
<age>18</age>
</root>
根节点下的user和age称作子节点,user相对于homeland来说又是homeland的根节点。所以xml是一个树状结构,什么时候是根什么时候为子都是相对而言,但需要牢记xml文件只有唯一的一个根节点挂着所有的子节点。
二、QT中读取xml的类与常用函数
QT中提供了一个读取xml的类QXmlStreamReader,该类在使用时就是创建一个读取xml文件的迭代器变量。
QXmlStreamReader xmlReader(&filename); //xmlReader就是一个迭代器
常用的一些API函数如下:
1.通过readNextStartElement()挨个读入节点
2.通过isStartElement()和isEndElement()判断是节点的开始和结束
3.通过name()得到当前节点的名字
4.通过readElementText()访问当前节点的内容
5.通过attributes()获取还有属性节点的属性
6.通过atEnd()判断XML文件是否结束
7.通过hasError()判断XML文件是否出错
三、代码思路
在了解xml的格式后,从人的角度出发,我们通常是看根节点,然后看根节点下的节点,读完一整个根节点的内容之后再去看下一个根节点。这样描述有些混乱,读者可以根据上述图1来进行理解。从根节点出发,然后读左一节点,读完左一节点后读中间节点,读完中间节点后读右一节点。
那么转换到机器中(代码)我们需要怎么去做呢?既然是树状结构,且要一段一段的去读,应该只要设置一个迭代器,先找到根节点,然后去寻找根节点下的内容,节点中的内容进行再判定,符合条件执行代码ÿ