前端之家收集整理的这篇文章主要介绍了
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();