转自:http://www.itdaan.com/blog/2017/02/20/301ad47832f4.html

由于windows环境下测试不稳定,博主选择在linux下进行的测试!

Qt - QDomDocument

#include <QtCore/QCoreApplication>
#include <qdom.h>
#include <QFile>
#include <QIODevice>
#include <iostream>
#ifdef Q_OS_WIN
# include <Windows.h>
#else
# include <sys/time.h>
#endifusing std::cout;
using std::endl;#define TEST_TIMES 10int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);#ifdef Q_OS_WIN  //< windowslong tStart = 0;long tEnd   = 0;LARGE_INTEGER nFreq;LARGE_INTEGER nStartTime;LARGE_INTEGER nEndTime;double time = 0.;QueryPerformanceFrequency(&nFreq);QFile file( "D:/DriverConfig.xml" );QDomDocument doc;for( int i = 0; i < TEST_TIMES; ++i ){doc.clear();//< step1 open fileif( !file.open(QIODevice::ReadOnly) ){cout << "failed to open file!" << endl;continue;}Sleep( 100 );QueryPerformanceCounter(&nStartTime); //< step2 set contentif( !doc.setContent(&file) ){cout << "Failed to read xml file!" << endl;}QueryPerformanceCounter(&nEndTime);time = (double)(nEndTime.QuadPart-nStartTime.QuadPart) / (double)nFreq.QuadPart * 1000.;  //< mscout << " seting content costs " << time << "ms" << endl;file.close();Sleep( 100 );}#else //< LINUXtimeval starttime, endtime;QFile file( "/home/liuyc/DriverConfig.xml" );QDomDocument doc;double timeuse = 0.;double timeAverage = 0.;for( int i = 0; i < TEST_TIMES; ++i ){doc.clear();//< step1 open fileif( !file.open(QIODevice::ReadOnly) ){cout << "failed to open file!" << endl;continue;}sleep( 1 );  //< delay for 1sgettimeofday( &starttime, 0 );//< step2 set contentif( !doc.setContent(&file) ){cout << "Failed to read xml file!" << endl;continue;}gettimeofday( &endtime, 0 );timeuse = 1000000. * (endtime.tv_sec - starttime.tv_sec) + endtime.tv_usec - starttime.tv_usec;timeuse *= 0.001 ;timeAverage += timeuse;cout << " reading files costs : " << timeuse << "ms" << endl;file.close();sleep( 1 );  //< delay for 1s}timeAverage /= TEST_TIMES;cout << " The End *****************\n    average costs = " << timeAverage << "ms" << endl; #endifreturn a.exec();
}

  

TinyXml-2

#include <iostream>
#include "tinyxml2.h"
#ifdef _WIN32
#include <Windows.h>
#else
#include <sys/time.h>
#endif
using namespace tinyxml2;
using std::cout;
using std::endl;#define TEST_TIMES  10int main()
{
#ifndef _WIN32  //< linux ------------------------------------------------tinyxml2::XMLDocument doc;timeval starttime, endtime;double timeuse = 0.;double timeAverage = 0.;for( int i = 0; i < TEST_TIMES; ++i ){gettimeofday( &starttime, 0 );if( XML_SUCCESS != doc.LoadFile( "/home/liuyc/DriverConfig.xml" ) ){cout << "failed in load xml file! _ " << i << endl;continue;}gettimeofday( &endtime, 0 );timeuse = 1000000. * (endtime.tv_sec - starttime.tv_sec) + endtime.tv_usec - starttime.tv_usec;timeuse *= 0.001 ;cout << " reading files costs : " << timeuse << "ms" << endl;timeAverage += timeuse;}timeAverage /= TEST_TIMES;cout << " \n** The end *******************\n    the average costs = " << timeAverage << "ms" << endl;#else  //< windows ---------------------------------------------------LARGE_INTEGER nFreq;LARGE_INTEGER nStartTime;LARGE_INTEGER nEndTime;double time = 0.;QueryPerformanceFrequency(&nFreq);tinyxml2::XMLDocument doc;for( int i = 0; i < TEST_TIMES; ++i ){QueryPerformanceCounter(&nStartTime); if( XML_SUCCESS != doc.LoadFile( "D:/DriverConfig.xml" ) ){cout << "failed in load xml file! _ " << i << endl;continue;}QueryPerformanceCounter(&nEndTime);time = (double)(nEndTime.QuadPart-nStartTime.QuadPart) / (double)nFreq.QuadPart * 1000.;  //< mscout << " reading files costs : " << time << "ms" << endl;}cout << endl;system("pause");#endif  //< end of windows ---------------------------------------------------return 0;
}

  

RapidXml

RapidXml版本: 1.13

#include <iostream>
#include "rapidxml.hpp"
#include "rapidxml_print.hpp"
#include "rapidxml_utils.hpp"
#ifdef _WIN32
# include <Windows.h>
#else
# include <sys/time.h>
#endifusing namespace rapidxml;
using std::cout;
using std::endl;#define TEST_TIMES  10int main()
{
#ifdef _WIN32  //< windowsLARGE_INTEGER nFreq;LARGE_INTEGER nStartTime;LARGE_INTEGER nEndTime;double time = 0.;QueryPerformanceFrequency(&nFreq);//< parse xmlfor( int i = 0 ; i < TEST_TIMES; ++i ){rapidxml::file<> filename( "D:/DriverConfig.xml" );xml_document<> doc;QueryPerformanceCounter(&nStartTime); doc.parse<0>( filename.data() );QueryPerformanceCounter(&nEndTime);time = (double)(nEndTime.QuadPart-nStartTime.QuadPart) / (double)nFreq.QuadPart * 1000.;  //< mscout << " reading files costs : " << time << "ms" << endl;doc.clear();}system("pause");#elsetimeval starttime, endtime;double timeuse = 0.;double timeAverage = 0.;//< parse xmlfor( int i = 0 ; i < TEST_TIMES; ++i ){rapidxml::file<> filename( "/home/liuyc/DriverConfig.xml" );xml_document<> doc;gettimeofday( &starttime, 0 );doc.parse<0>( filename.data() );gettimeofday( &endtime, 0 );timeuse = 1000000. * (endtime.tv_sec - starttime.tv_sec) + endtime.tv_usec - starttime.tv_usec;timeuse *= 0.001 ;cout << " reading files costs : " << timeuse << "ms" << endl;doc.clear();timeAverage += timeuse;}timeAverage /= TEST_TIMES;cout << " \n** The end *******************\n    the average costs = " << timeAverage << "ms" << endl;#endifreturn 0;
}

  

PugiXml

#include <iostream>
#include "pugixml.hpp"
#include "pugiconfig.hpp"
#include <sys/time.h>
using namespace std;#define TEST_TIMES 10int main( void )
{pugi::xml_document doc;timeval starttime, endtime;double timeuse = 0.;double timeAverage = 0.;for( int i = 0; i < TEST_TIMES; ++i ){gettimeofday( &starttime, 0 );if( !doc.load_file( "/home/liuyc/DriverConfig.xml" ) ){cout << "failed in load xml file! _ " << i << endl;continue;}gettimeofday( &endtime, 0 );timeuse = 1000000. * (endtime.tv_sec - starttime.tv_sec) + endtime.tv_usec - starttime.tv_usec;timeuse *= 0.001 ;cout << " reading files costs : " << timeuse << "ms" << endl;timeAverage += timeuse;}timeAverage /= TEST_TIMES;cout << " \n** The end *******************\n    the average costs = " << timeAverage << "ms" << endl;return 0;
}

  

总结

统计的时间如下(LINUX):

解析器 消耗时间(ms) 效率倍数(相对Qt)
Qt-QDomDocument 25.85 1
TinyXml2 6.64 3.89
RapidXml 2.71 9.54
pugixml 1.57 16.47

[转]xml解析工具的效率比较QDomDocument、TinyXml-2、RapidXml、PugiXml相关推荐

  1. Java XML解析工具 dom4j介绍及使用实例

    Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...

  2. Java XML解析工具 JDOM介绍及使用实例

    Java XML解析工具 JDOM JDOM介绍 JDOM是一种使用XML的独特Java工具包,用于快速开发XML应用程序. 它的设计包含Java语言的语法乃至语义. JDOM是一个开源项目,它基于树 ...

  3. 高效的Xml解析工具

    前言 大家在工作中不知道有没有遇到过类似的情况: 1.需要写代码解析一个xml文件时,发现需要导入dom4j的jar包,一时又找不到,然后还得浪费几分钟时间去找jar包. 2.好不容易找到了jar包, ...

  4. Java XML解析工具类

    Java XML解析工具类 Java解析XML的方式有很多,这里不一一说明了,利用三方jar包,实现了一个XML工具类 本身是有个需求,讲三方公司的XML请求文件中的Response里的属性赋值成ja ...

  5. java 之 xml 解析工具

    java 解析 xml 文件 转载自 : http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/17/3082949.html 众所周知,现在解析X ...

  6. xml解析方式与效率对比

    http://www.sqlite.com.cn/MySqlite/12/212.Html http://gatusso52.javaeye.com/blog/446100 方式 模型 原理 说明1 ...

  7. java xml开源操作类,xml解析和操作的开源工具项目涵盖java c++ php 等语言

    XML解析器-Xerces    XML操作库-dom4j    XML文档解析器-Digester    J2ME-的XML-解析器-kXML XML解析类库-MXP1    XML解析器-LibX ...

  8. 做一个项目,平时都用到哪些工具提高效率(上)

    做一个项目,平时都用到哪些工具提高效率(上)  转载 做.NET 相关项目,Visual Studio 2008,SQL Server 2000/2005是标准的配置,但是,除此之外,还可以应用哪些工 ...

  9. 做一个项目,平时都用到哪些工具提高效率(上)[转]

    做.NET 相关项目,Visual Studio 2008,SQL Server 2000/2005是标准的配置,但是,除此之外,还可以应用哪些工具来提高工作效率,让项目做的更轻松. 1  需要一个代 ...

最新文章

  1. python[外星人入侵] 项目
  2. AT+CSMP 设置短消息文本参数
  3. 《.NET 性能优化》送书活动结果公布
  4. BZOJ4589. Hard Nim
  5. uniapp框架之如何修改接口传参的参数
  6. java中abcd_java中请不要出现aBcd类似的变量名
  7. 判断小写字母 php,php中怎样推断字母是大写照样小写_后端开发
  8. 150904 高速公路 ccf
  9. umpy知识点补充:np.vstack()np.hstack()
  10. 【历史上的今天】5 月 2 日:首个 MySQL 公开版本发布;微软推出双键鼠标;美国门户网站改名
  11. 简单说from_tensor_slices()函数
  12. extjs3.0与extjs4.0区别
  13. 先进事迹计算机维护与维修,汽车维修工先进事迹
  14. mysql的group by语句不会产生_MySQL:为什么查询列表中多了它,GROUP BY语句就会报错呢?...
  15. android多个module打包aar,android 多module打包aar
  16. CVP0.M24、CVP0.M28、CVZ0.S08插装式单向阀
  17. 2021-2027全球与中国健身俱乐部和健身房管理软件市场现状及未来发展趋势
  18. 帅某---考研---高数笔记---汤家凤---第十一章无穷级数
  19. Scanner的nextLine()方法读不到数据的小坑
  20. python 打开dat格式_p4vasp分析态密度输出pdos数据后用Python分列

热门文章

  1. AI一分钟 | 特斯拉再融46亿;腾讯AI Lab宣布开源多标签图像数据集
  2. 又一届Google Cloud Next,李飞飞发布TPU 3.0,两大AutoML新品
  3. 一周AI回顾 | 特斯拉AI负责人说神经网络正在改变编程,机器学习大神Bengio新论文专注RNN优化
  4. 跨界 | 土木工程也开始AI化了:用卷积神经网络实现结构损伤视觉识别
  5. 彻底理解HashMap及LinkedHashMap
  6. JDK 17 要来了!会带来什么新特性?不好意思,我还在 JDK 7 踏步走...
  7. 不少Java程序员都觉得Lambda表达式很鸡肋,它到底有何用呢?
  8. 【精简教程版】100行代码入手天池CV赛事
  9. Kaggle知识点:数据分析思路与工具(EDA)
  10. 【numpy学习笔记】数组的切片,索引,迭代