qt中xml文件的简单读取

 介绍

在Qt中提供了QtXml模块实现了对XML数据的处理,我们在Qt帮助中输入关键字QtXml Module,可以看到该模块的类表。在这里我们可以看到所有相关的类,它们主要是服务于两种操作XML文档的方法:DOM和SAX。 Dom(Document Object Model,即文档对象模型)把XML文档转换成应用程序可以遍历的树形结构,这样便可以随机访问其中的节点。它的缺点是需要将整个XML文档读入内存, 消耗内存较多。除了上面的两种方法外,Qt还提供了简单的QXmlStreamReader和QXmlStreamWriter对XML文档进行读写,下 面我们先介绍使用DOM的方式来操作XML文档。
规范的XML文档
01    <?xml version=”1.0″ encoding=”UTF-8″?>  //XML说明
02      
03    <library>  //根元素
04      
05    <book id=”01″>   //library元素的第一个子元素,“id”是其属性
06      
07    <title>Qt</title>   //book元素的子元素,“Qt”是元素的文本
08      
09    <author>shiming</author>   //book元素的子元素,title元素的兄弟元素
10      
11    </book>  //结束标记名
12      
13    <book id=”02″>
14      
15    <title>Linux</title>
16      
17    <author>yafei</author>
18      
19    </book>
20      
21    </library>

可以看到,一个规范的XML文档,是用XML说明开始的,主要由各元素组成。XML文档第一个元素就是根元素,XML文档必须有且只有一个根元素。元素是可以嵌套
代码实现

首先需要在工程文件中手动添加QT += xmL 接下来需要新建QDomDocument类对象,它代表一个XML文档,具体代码如下:
01    QDomDocument doc;   //新建QDomDocument类对象,它代表一个XML文档
02      
03    QFile file(“my.xml”);   //建立指向“my.xml”文件的QFile对象
04      
05    if (!file.open(QIODevice::ReadOnly)) return 0;  //以只读方式打开
06      
07    if (!doc.setContent(&file)) { file.close(); return 0; }
08      
09    //将文件内容读到doc中
10    file.close();
然后我们解析各个接点,具体代码如下:
01    QDomElement docElem = doc.documentElement();  //返回根元素
02      
03    QDomNode n = docElem.firstChild();   //返回根节点的第一个子节点
04      
05    while(!n.isNull())
06      
07    {   //如果节点不为空
08      
09        if (n.isElement())  //如果节点是元素
10      
11        {
12      
13            QDomElement e = n.toElement();  //将其转换为元素
14      
15            qDebug() << qPrintable(e.tagName())   //返回元素标记
16      
17            << qPrintable(e.attribute(“id”));  //返回元素id属性的值
18            QDomNodeList list = e.childNodes(); //获得元素e的所有子节点的列表
19      
20            for(int i=0; i<list.count(); i++) //遍历该列表
21      
22            {
23      
24                QDomNode node = list.at(i);
25      
26                if(node.isElement())
27      
28                qDebug() << “   “<< qPrintable(node.toElement().tagName())
29      
30                <<qPrintable(node.toElement().text());
31      
32            }
33      
34        }
35      
36        n = n.nextSibling();  //下一个兄弟节点
37      
38    }
总结

小结:通过上面的例子,我们实现了对一个XML文档的读取。可以看到,在QDom中,是将整个XML文件读到内存中的doc对象中的。然后使用节点 (QDomNode )操作doc对象,像XML说明,元素,属性,文本等等都被看做是节点,这样就使得操作XML文档变得很简单,我们只需通过转换函数将节点转换成相应的类 型,如QDomElement e = n.toElement();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值