因为需要读取配置文件,我的配置文件采用xml;因此编写了使用qt读取xml文件内容的代码,xml文件
如下:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <configuration>
  3. <server>
  4. <item key="serverip" value="222.88.1.146" />
  5. <item key="serverport" value="5000" />
  6. </server>
  7. </configuration>

为了读取xml,我编写ReadConfig类代码如下:
ReadConfig.h文件内容如下

  1. /******************************************************************************
  2. *
  3. * 文件名: ReadConfig.h
  4. *
  5. * 文件摘要: 读取系统配置文件
  6. *
  7. * 作者:程晓鹏
  8. *
  9. * 文件创建时间: 2012/02/23 09:59:36
  10. *
  11. *******************************************************************************/
  12. #ifndef READCONFIG_H
  13. #define READCONFIG_H
  14. #include <QString>
  15. #include <QFile>
  16. #include <QDomDocument>
  17. /**
  18. * 读取配置文件类
  19. *
  20. */
  21. class ReadConfig{
  22. public:
  23. /**
  24. * 构造函数
  25. *
  26. */
  27. ReadConfig();
  28. /**
  29. * 析构函数
  30. *
  31. */
  32. ~ReadConfig();
  33. /**
  34. * 获取配置文件中的值
  35. *
  36. * @param key 配置的键
  37. * @param type 类型标签
  38. *
  39. * @return 配置项对应的值
  40. */
  41. QString getValue(const QString &key, const QString &type = "server");
  42. private:
  43. QFile *localfile;
  44. QDomDocument *dom;
  45. };
  46. #endif

ReadConfig.cpp内容如下:

  1. /******************************************************************************
  2. *
  3. * 文件名: ReadConfig.cpp
  4. *
  5. * 文件摘要: ReadConfig.h的实现文件
  6. *
  7. * 作者:程晓鹏
  8. *
  9. * 文件创建时间: 2012/02/23 10:07:05
  10. *
  11. *******************************************************************************/
  12. #include "ReadConfig.h"
  13. ReadConfig::ReadConfig()
  14. {
  15. QString strfilename = QString("p2p.config");
  16. localfile = new QFile(strfilename);
  17. if(!localfile->open(QFile::ReadOnly)){
  18. return;
  19. }
  20. dom = new QDomDocument();
  21. if(!dom->setContent(localfile)){
  22. localfile->close();
  23. return;
  24. }
  25. }
  26. ReadConfig::~ReadConfig()
  27. {
  28. delete localfile;
  29. localfile = 0;
  30. delete dom;
  31. dom = 0;
  32. }
  33. QString ReadConfig::getValue(const QString &key, const QString &type)
  34. {
  35. QString result = "";
  36. QDomNodeList nodelist = dom->elementsByTagName(type);    /**< 读取类型节点集合 */
  37. for(int i=0; i<nodelist.count(); i++){
  38. QDomNode node = nodelist.at(i);
  39. QDomNodeList itemlist = node.childNodes(); /**< 获取字节点集合 */
  40. for(int j=0; j<itemlist.count(); j++){
  41. QDomNode mynode = itemlist.at(j);
  42. if(mynode.toElement().attribute("key") == key){ /**< 查找所需要的键值 */
  43. result = mynode.toElement().attribute("value");
  44. break;
  45. }
  46. }
  47. }
  48. return result;
  49. }

另外,因为采用Qt的xml模块,记得在你的项目pro文件中添加对xml的引用

QT +=  xml

Qt中使用DOM解析XML文件或者字符串(实例)的更多相关文章

  1. Qt中使用DOM解析XML文件或者字符串二(实例)

    介绍 在Qt中提供了QtXml模块实现了对XML数据的处理,我们在Qt帮助中输入关键字QtXml Module,可以看到该模块的类表.在这里我们可以看到所有相关的类,它们主要是服务于两种操作XML文档 ...

  2. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  3. 使用DOM解析xml文件

    使用DOM解析xml文件 要解析的xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <Langu ...

  4. DOM解析XML文件例子

    DOM解析XML文件是一次性将目标文件中的所有节点都读入,然后再进行后续操作的方式. 一般分为以下几步: 1. 定义好目标XML文件路径path . 2. 实例化DOM解析工厂对象 ,Document ...

  5. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  6. 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点

    使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...

  7. 用js解析XML文件,字符串一些心得

    解析XML文件遇到的问题 今天秦博士叫我解析一下XML文件,将里面的所有的X坐标Y坐标放在一个数组里面然后写在文档里让他进行算法比对,大家都知道了啦,解析XML文件获取里面的坐标数据什么的,当然是用前 ...

  8. Qt中三种解析xml的方式

    在下面的随笔中,我会根据xml的结构,给出Qt中解析这个xml的三种方式的代码.虽然,这个代码时通过调用Qt的函数实现的,但是,很多开源的C++解析xml的库,甚至很多其他语言解析xml的库,都和下面 ...

  9. dom 解析xml文件

    JAXP技术 JAXP即Java Api for Xml Processing该API主要是SUN提供的用于解析XML数据的一整套解决方案,主要包含了DOM和SAX解析技术.大家可以参见SUN的以下两 ...

随机推荐

  1. AIDL旅行记之开篇AIDL基本介绍

    嗨,伙伴们,计划了一周的想法最终要在这一刻实现了. 一直都想写一个博客专栏,但是总是鼓不起勇气来写.感觉自己的水量还不太够.哈哈.这次下定决心,与小伙伴们一起分享下Android中的AIDL,从此,也 ...

  2. 如何使用屏幕取色工具ColorPixl

    ColorPix可以屏幕取色,假如现在想要取色桌面徽标键的颜色,按任意键可以锁定这个区域(press any key to lock)这样我们就可以在放大的区域更清楚的取色,加号按钮可以设置该软件是否 ...

  3. 记dynamic的一个小坑 -- RuntimeBinderException:“object”未包括“xxx”的定义

    创建一个控制台程序和一个类库, 在控制台创建一个匿名对象.然后再在类库中訪问它.代码例如以下: namespace ConsoleApplication1 { class Program { stat ...

  4. mac 下vim 配置文件

    " Configuration file for vim set modelines=0 " CVE-2007-2438 " Normally we use vim-ex ...

  5. 触发器五(建立INSTEAD OF触发器)(学习笔记)

    INSTEAD OF触发器 对于简单视图,可以直接执行INSERT,UPDATE和DELETE操作但是对于复杂视图,不允许直接执行INSERT,UPDATE和DELETE操作.为了在具有以上情况的复杂 ...

  6. 深入理解Object提供的阻塞和唤醒API

    深入理解Object提供的阻塞和唤醒API 前提 前段时间花了大量时间去研读JUC中同步器AbstractQueuedSynchronizer的源码实现,再结合很久之前看过的一篇关于Object提供的 ...

  7. 用Postfix + Dovecot 搭建的邮件server被垃圾邮件其中转server的处理

    今天发邮件. 发送失败.然后到server上看日志, 发现硬盘被垃圾邮件的缓存队列和日志塞满了. tail    -f    /var/log/maillog   发现疯狂刷屏.部分日志例如以下 : ...

  8. 解决java.lang.OutOfMemoryError: unable to create new native thread问题

    解决:1.升级JVM到最新的版本 最新版本的JVM一般在内存优化方面做的更好,升级JVM到最新的版本可能会缓解测问题2.从操作系统层面去解决 使用64位操作系统 如果使用32位操作系统遇到unable ...

  9. Eclipse 中选中一个单词 ,其他相同的单词颜色就会变化

    "Window"-"preferences"-"Java"-"Editor"-"Mark Occurrence ...

  10. exception Access restriction: The type 'BASE64Encoder' is not API

      Created by Marydon on 1.情景展示 在eclipse中切换jdk版本后,报错信息为:exception Access restriction: The type 'BASE6 ...