qt中xml文件的简单读取
2014-05-03 14:43
169 查看
介绍
在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();
在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();
相关文章推荐
- 编写读取XML文件的简单入门
- properties类读取.properties 、简单XML文件、txt文件
- JSP简单练习-用JDOM读取xml文件
- 使用Qt中的QXmlStreamReader读取XML文件
- 用Ajax读取xml文件的简单例子
- QT读取xml文件,然后写入另外一个新的xml文件
- SQL Server中读取XML文件的简单做法
- XPath在QT中的使用(QXmlQuery读取XML文件)
- java实现利用String类的简单方法读取xml文件中某个标签中的内容
- qt 读取xml文件
- 用TinyXml2读取XML文件的一个简单Demo
- 使用Qt中的QXmlStreamReader读取XML文件
- 使用Qt中的QXmlStreamReader读取XML文件
- dom4j读取xml文件 简单例子
- 使用dom4j最简单的读取一个xml文件的内容
- 用Ajax读取xml文件的简单例子
- QT读取Excel 简单范例代码
- SQL Server中读取XML文件的简单做法
- QT读取XML文件
- Qt中QDomDocument,读取txt文件和xml文件,并且修改xml文件和保存修改后的文件