Qt中使用DOM解析XML文件或者字符串二(实例)
介绍
在Qt中提供了QtXml模块实现了对XML数据的处理,我们在Qt帮助中输入关键字QtXml Module,可以看到该模块的类表。在这里我们可以看到所有相关的类,它们主要是服务于两种操作XML文档的方法:DOM和SAX。 Dom(Document Object Model,即文档对象模型)把XML文档转换成应用程序可以遍历的树形结构,这样便可以随机访问其中的节点。它的缺点是需要将整个XML文档读入内存, 消耗内存较多。除了上面的两种方法外,Qt还提供了简单的QXmlStreamReader和QXmlStreamWriter对XML文档进行读写,下 面我们先介绍使用DOM的方式来操作XML文档。
规范的XML文档
<?xml version=”1.0″ encoding=”UTF-8″?> //XML说明
<library> //根元素
<book id=”01″> //library元素的第一个子元素,“id”是其属性06
<title>Qt</title> //book元素的子元素,“Qt”是元素的文本
<author>shiming</author> //book元素的子元素,title元素的兄弟元素
</book> //结束标记名
<book id=”02″>
<title>Linux</title>
<author>yafei</author>
</book>
</library>
可以看到,一个规范的XML文档,是用XML说明开始的,主要由各元素组成。XML文档第一个元素就是根元素,XML文档必须有且只有一个根元素。元素是可以嵌套
代码实现
首先需要在工程文件中手动添加QT += xmL 接下来需要新建QDomDocument类对象,它代表一个XML文档,具体代码如下:
view sourceprint?
QDomDocument doc; //新建QDomDocument类对象,它代表一个XML文档
QFile file(“my.xml”); //建立指向“my.xml”文件的QFile对象
if (!file.open(QIODevice::ReadOnly)) return 0; //以只读方式打开
if (!doc.setContent(&file)) { file.close(); return 0; }
//将文件内容读到doc中
file.close();
然后我们解析各个接点,具体代码如下:
QDomElement docElem = doc.documentElement(); //返回根元素
QDomNode n = docElem.firstChild(); //返回根节点的第一个子节点
while(!n.isNull())
{ //如果节点不为空
if (n.isElement()) //如果节点是元素
{
QDomElement e = n.toElement(); //将其转换为元素
qDebug() << qPrintable(e.tagName()) //返回元素标记
<< qPrintable(e.attribute(“id”)); //返回元素id属性的值
QDomNodeList list = e.childNodes(); //获得元素e的所有子节点的列表
for(int i=0; i<list.count(); i++) //遍历该列表
{
QDomNode node = list.at(i);
if(node.isElement())
qDebug() << “ “<< qPrintable(node.toElement().tagName())
<<qPrintable(node.toElement().text());
}
}
n = n.nextSibling(); //下一个兄弟节点
}
总结
小结:通过上面的例子,我们实现了对一个XML文档的读取。可以看到,在QDom中,是将整个XML文件读到内存中的doc对象中的。然后使用节点 (QDomNode )操作doc对象,像XML说明,元素,属性,文本等等都被看做是节点,这样就使得操作XML文档变得很简单,我们只需通过转换函数将节点转换成相应的类 型,如QDomElement e = n.toElement();
Qt中使用DOM解析XML文件或者字符串二(实例)的更多相关文章
- Qt中使用DOM解析XML文件或者字符串(实例)
因为需要读取配置文件,我的配置文件采用xml:因此编写了使用qt读取xml文件内容的代码,xml文件如下: <?xml version="1.0" encoding=&quo ...
- JAVA中使用DOM解析XML文件
XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...
- 使用DOM解析xml文件
使用DOM解析xml文件 要解析的xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <Langu ...
- DOM解析XML文件例子
DOM解析XML文件是一次性将目标文件中的所有节点都读入,然后再进行后续操作的方式. 一般分为以下几步: 1. 定义好目标XML文件路径path . 2. 实例化DOM解析工厂对象 ,Document ...
- java中采用dom4j解析xml文件
一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...
- 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点
使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...
- 用js解析XML文件,字符串一些心得
解析XML文件遇到的问题 今天秦博士叫我解析一下XML文件,将里面的所有的X坐标Y坐标放在一个数组里面然后写在文档里让他进行算法比对,大家都知道了啦,解析XML文件获取里面的坐标数据什么的,当然是用前 ...
- Qt中三种解析xml的方式
在下面的随笔中,我会根据xml的结构,给出Qt中解析这个xml的三种方式的代码.虽然,这个代码时通过调用Qt的函数实现的,但是,很多开源的C++解析xml的库,甚至很多其他语言解析xml的库,都和下面 ...
- dom 解析xml文件
JAXP技术 JAXP即Java Api for Xml Processing该API主要是SUN提供的用于解析XML数据的一整套解决方案,主要包含了DOM和SAX解析技术.大家可以参见SUN的以下两 ...
随机推荐
- which命令(转)
原文:http://www.cnblogs.com/peida/archive/2012/11/08/2759805.html 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一 ...
- HibernateDaoSupport与JdbcDaoSupport
Dao 的支持类可以有好多,如: JdbcDaoSupport , HibernateDaoSupport ,JdoDaoSupport等,下面对最常用的HibernateDaoSupport与Jdb ...
- win10开启IE11企业模式
.右击任务栏开始按钮,选择“运行”,打开运行框(或使用组合键Win+R打开运行) .输入gpedit.msc,进入“本地组策略编辑器”(注:该功能不支持Win8/Win8.1核心版.需要Win8/Wi ...
- OpenERP 负载平衡
OpenERP 7.0 带来了许多新特性,架构上也有许多改进.其中可配置 worker 参数,可使 OpenERP 运行在多进程模式,突破GIL的限制,有效利用了现代多核CPU的性能.但默认情况下,O ...
- 【实践】源代码分析工具Doxygen+Graphviz
拿到一个新项目或者一个开源框架,看源代码的方式不是先进行单步调试!最好的方式是先画出整个项目或者开源框架的类.协作.已经方法调用图,能够帮助你更快的理解框架或者项目的设计. 打包下载地址:http:/ ...
- ORA-22828 输入样式或替换參数超过了32k限制大小
今天调试程序报下面错误: ORA-22828: input pattern or replacement parameters exceed 32K size limit 22828. 00000 - ...
- DIV+CSS专题:十天学会DIV+CSS
DIV+CSS专题:十天学会DIV+CSS,在网上看到的.感觉蛮好,推荐一下. 十天学会DIV+CSS(WEB标准)CHM格式文件下载 第十天 div+css网页标准布局实例教程(三) 第十天 div ...
- RHEL7 timedatectl命令
1.要显示系统的当前时间和日期,使用timedatectl命令,如下: [root@rhel7 ~]# timedatectl Local time: Mon -- :: EDT Universal ...
- 【laravel5.4】查询构造器对象与模型instance的互相换换
1.查询构造器一般情况下返回对象,但是无法直接使用model类的一些方法,如toJson.toArray等 DB::table 结果转换成 model 类实例[collect 实例] public f ...
- C中字符串分割函数strtok的一个坑
strtok的典型用法是: p = strtok(s4, split); while(p != NULL){ printf("%s\n", p); p = strtok(NULL, ...