Qt中使用DOM解析XML文件或者字符串(实例)
因为需要读取配置文件,我的配置文件采用xml;因此编写了使用qt读取xml文件内容的代码,xml文件
如下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <configuration>
- <server>
- <item key="serverip" value="222.88.1.146" />
- <item key="serverport" value="5000" />
- </server>
- </configuration>
为了读取xml,我编写ReadConfig类代码如下:
ReadConfig.h文件内容如下
- /******************************************************************************
- *
- * 文件名: ReadConfig.h
- *
- * 文件摘要: 读取系统配置文件
- *
- * 作者:程晓鹏
- *
- * 文件创建时间: 2012/02/23 09:59:36
- *
- *******************************************************************************/
- #ifndef READCONFIG_H
- #define READCONFIG_H
- #include <QString>
- #include <QFile>
- #include <QDomDocument>
- /**
- * 读取配置文件类
- *
- */
- class ReadConfig{
- public:
- /**
- * 构造函数
- *
- */
- ReadConfig();
- /**
- * 析构函数
- *
- */
- ~ReadConfig();
- /**
- * 获取配置文件中的值
- *
- * @param key 配置的键
- * @param type 类型标签
- *
- * @return 配置项对应的值
- */
- QString getValue(const QString &key, const QString &type = "server");
- private:
- QFile *localfile;
- QDomDocument *dom;
- };
- #endif
ReadConfig.cpp内容如下:
- /******************************************************************************
- *
- * 文件名: ReadConfig.cpp
- *
- * 文件摘要: ReadConfig.h的实现文件
- *
- * 作者:程晓鹏
- *
- * 文件创建时间: 2012/02/23 10:07:05
- *
- *******************************************************************************/
- #include "ReadConfig.h"
- ReadConfig::ReadConfig()
- {
- QString strfilename = QString("p2p.config");
- localfile = new QFile(strfilename);
- if(!localfile->open(QFile::ReadOnly)){
- return;
- }
- dom = new QDomDocument();
- if(!dom->setContent(localfile)){
- localfile->close();
- return;
- }
- }
- ReadConfig::~ReadConfig()
- {
- delete localfile;
- localfile = 0;
- delete dom;
- dom = 0;
- }
- QString ReadConfig::getValue(const QString &key, const QString &type)
- {
- QString result = "";
- QDomNodeList nodelist = dom->elementsByTagName(type); /**< 读取类型节点集合 */
- for(int i=0; i<nodelist.count(); i++){
- QDomNode node = nodelist.at(i);
- QDomNodeList itemlist = node.childNodes(); /**< 获取字节点集合 */
- for(int j=0; j<itemlist.count(); j++){
- QDomNode mynode = itemlist.at(j);
- if(mynode.toElement().attribute("key") == key){ /**< 查找所需要的键值 */
- result = mynode.toElement().attribute("value");
- break;
- }
- }
- }
- return result;
- }
另外,因为采用Qt的xml模块,记得在你的项目pro文件中添加对xml的引用
QT += xml
Qt中使用DOM解析XML文件或者字符串(实例)的更多相关文章
- Qt中使用DOM解析XML文件或者字符串二(实例)
介绍 在Qt中提供了QtXml模块实现了对XML数据的处理,我们在Qt帮助中输入关键字QtXml Module,可以看到该模块的类表.在这里我们可以看到所有相关的类,它们主要是服务于两种操作XML文档 ...
- 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的以下两 ...
随机推荐
- (剑指Offer)面试题1:赋值运算符函数
题目: 如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString{public: CMyString(char* pData=NULL); CMy ...
- STL - 容器 - List
List内部结构完全不同于array, vector, deque. 它提供了两个pointer,指向第一个和最后一个元素. 不支持随机访问元素,因此要访问第n个元素必须爬过n - 1个元素. 在任何 ...
- ZH奶酪:【阅读笔记】Deep Learning, NLP, and Representations
中文译文:深度学习.自然语言处理和表征方法 http://blog.jobbole.com/77709/ 英文原文:Deep Learning, NLP, and Representations ht ...
- 算法笔记_174:历届试题 地宫取宝(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明 ...
- Jacoco的原理(各个覆盖率的解释)
覆盖率计数器 Jacoco使用一系列的不同的计数器来做覆盖率的度量计算.所有这些计数器都是从java的class文件中获取信息,这些class文件可以(可选)包含调试的信息在里面.即使在没有源码的情况 ...
- 笔试题之ejb
ejb部分 1.EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别. EJB包括Session Bean. ...
- 重置outlook 2010
1.进入 D:\program files\mirosoft office\ioffice14 2.outlook /importprf .\.prf 3.账号问题可以-->控制面板--> ...
- Ubuntu中iptables的使用
(一) 设置开机启动iptables# sysv-rc-conf --level 2345 iptables on (二) iptables的基本命令 1. 列出当前iptables的策略和规则# i ...
- C10K——千万级并发实现的秘密:内核不是解决方案,而是问题所在!(转)
既然我们已经解决了 C10K并发连接问题,应该如何提高水平支持千万级并发连接?你可能会说不可能.不,现在系统已经在用你可能不熟悉甚至激进的方式支持千万级别的并发连接. 要知道它是如何做到的,我们首先要 ...
- 参数关键点和return返回多个(伪多个)值问题
# -*- coding: cp936 -*- #python 27 #xiaodeng #参数关键点和return返回多个(伪多个)值问题 #传递参数的概念: #即:对象作为输入,发送给函数的方式 ...