TinyXML有两个不爽的地方,一是它的接口使用FILE*,另外一个是它对wchar_t不能很好的支持。前阵子看Boost库的更新中多了一个PropertyTree,他在处理XML时用到了另外一个小的库--RapidXML。既然间接的是Boost库的一部分,所以是值得一试的。于是找到其官方网站(http://rapidxml.sourceforge.net/ )研究了一番。一看之下,甚是满意,也推荐给大家看看!

首先就是速度,据它自己宣称比TinyXML快30到60倍 ,比Xerces DOM快50到100倍!详细的测试比较请见其用户手册(http://rapidxml.sourceforge.net/manual.html )的“4. Performance ”一节。

其次它的设计非常的简洁,只依赖于标准库中的几个基本的类。它的输入输出都是字符串,这样很好,一个库就应该关注自己核心的内容,做尽量少的事情。它的API其实和TinyXML倒是有几分相似,用过TinyXML的人应该很容易上手:

TinyXML主要接口类 RapidXML的主要接口类
class TiXmlDocument

template 
   class xml_document

class TiXmlNode

template 
    class xml_node

class TiXmlAttribute

template 
    class xml_attribute

下面还是看一个具体的例子来体验一下,下面是TinyXML官方教程中创建XML文档的一段代码:

[cpp] view plain copy

  1. void build_simple_doc( )
  2. {
  3. // Make xml: World
  4. TiXmlDocument doc;
  5. TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
  6. TiXmlElement * element = new TiXmlElement( "Hello" );
  7. TiXmlText * text = new TiXmlText( "World" );
  8. element->LinkEndChild( text );
  9. doc.LinkEndChild( decl );
  10. doc.LinkEndChild( element );
  11. doc.SaveFile( "madeByHand.xml" );
  12. }

下面是使用RapidXML实现类似功能的代码:

[cpp] view plain copy

  1. void build_simple_doc_by_rapidxml()
  2. {
  3. xml_document<> doc;
  4. xml_node<>* decl = doc.allocate_node(node_declaration);
  5. xml_attribute<>* decl_ver =
  6. doc.allocate_attribute("version", "1.0");
  7. decl->append_attribute(decl_ver);
  8. doc.append_node(decl);
  9. xml_node<>* node =
  10. doc.allocate_node(node_element,    "Hello", "World");
  11. doc.append_node(node);
  12. string text;
  13. rapidxml::print(std::back_inserter(text), doc, 0);
  14. // write text to file by yourself
  15. }

下面是使用RapidXML分析XML的样例代码:

[cpp] view plain copy

  1. void parse_doc_by_rapidxml(char* xml_doc)
  2. {
  3. xml_document<> doc;        // character type defaults to char
  4. doc.parse<0>(xml_doc);  // 0 means default parse flags
  5. xml_node<> *node = doc.first_node("Hello");
  6. string node_val = node->value();
  7. }

好东西,大家分享!:D

tinyxml2比1更高效,可以尝试与rapidxml比较

tinyxml和rapidxml相关推荐

  1. 人工智能和机器学习领域有哪些有趣的开源项目

    人工智能和机器学习领域有哪些有趣的开源项目? 投递人 itwriter 发布于 2014-12-02 11:21 评论(0) 有20人阅读  原文链接  [收藏]  « 本文简要介绍了 10 款   ...

  2. C++开源库,欢迎补充。

    C++在"商业应用"方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年.因为当今商业应用程序类型,已经从桌面应用迅速转移成 Web应 用.当Java横行天下之后,MS ...

  3. 【玩转cocos2d-x之三十二】xml的解析

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/17409381 cocos2d-x中对xml的解析是采用的TinyXML库,而 ...

  4. C++开源库详细介绍

    C++在"商业应用"方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年.因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应 用.当Java横行天下之后,MS又 ...

  5. 在别的地方看的给程序员介绍一些C++开源库,记录给大家共同学习

    在别的地方看的<<给程序员介绍一些C++开源库>>,记录给大家共同学习 首先说明这篇文章不是出自我手,大家共同学习. 引用地址:http://oss.org.cn/?actio ...

  6. 服务器开发24补充:市面上一些xml第三方库解析速度的对比,tinyxml、tinyxml2、Qt、RapidXml、PugiXml,和tinyxml与tinyxml2的对比

    文章目录 零.背景前提 一.Qt - QDomDocument 1)测试代码 2)测试结果 二.TinyXml(略) 三.TinyXml2 1)测试代码 2)运行效果及结论 四.RapidXml 1) ...

  7. 使用 rapidxml 做配置文件

    对于配置文件,一般会选用ini,xml 等等的配置格式.如何快速高效的从文件内读取自己想要的信息是每个做配置文件想要达到的效果.对以小型开发我们并不用时用到msxml这种重量级的解析器.那样会给自己添 ...

  8. tinyxml 内存泄露_tinyxml优化之一

    最近在搞XML解析优化,公司引擎用了tinyxml1和tinyxml2两个XML库,后者的效率比前者高60%吧,tinyxml1解析大文件是很慢的,可以淘汰了,tinyxml2还勉强,快的话还得算pu ...

  9. RapidXml使用(备忘)

    好吧,先来说一下,为什么我要选择RapidXml来进行本地xml文件的解析: 对,没有错,接下来你看到的很长的一大段都摘自于: http://stackoverflow.com/questions/9 ...

最新文章

  1. java 日志 生成器_自动生成 java 测试 mock 对象框架 DataFactory-01-入门使用教程
  2. 领域驱动设计在互联网业务开发中的实践
  3. 区块链BaaS云服务(27)米链科技 HSpeed链
  4. [WebGL入门]十二,模型数据和顶点属性
  5. 1025:保留12位小数的浮点数
  6. CodeForces - 501C Misha and Forest(拓扑排序)
  7. Web前端开发笔记——第四章 JavaScript程序设计 第五节 数组
  8. MyBatis整合Spring原理分析
  9. 深度学习2.0-38.RNNCell使用-RNN Layer
  10. 基于SSM框架实现的房屋租赁管理系统
  11. 高性能Nginx服务器+互联网高并发解决方案+安全架构 蚂蚁学堂互联网架构师课程
  12. 鹰眼系统原理_飞思卡尔智能车一:山外鹰眼摄像头使用原理
  13. 微信小程序的自定义组件
  14. 暂时性死区的详解(TDZ)
  15. 格创东智携半导体良率提升智能分析平台入选工信部大数据产业发展试点示范项目
  16. 计算机毕业论文致谢,计算机软件毕业论文致谢词
  17. 雾锁FCoin:局中局套住了谁?
  18. Java编程思想第四版读书笔记——第九章 接口
  19. vba:消息框基础,msgbox
  20. 这6种性格的人真的不适合做数据分析!

热门文章

  1. 编译原理 —— DFA的化简
  2. “你家娃为什么这么爱看书?”只用3招,孩子秒变小书迷
  3. python符号运算卷积_Python使用scipy模块实现一维卷积运算示例
  4. ME59N 从PR自动创建PO,更改默认凭证类型NB为指定类型
  5. 博客导航置顶快速直达滴滴滴
  6. jqgrid本地加载分页_jqGrid 分页
  7. Abbyy Finereader 15:文档对比功能不支持中文的处理方法
  8. UF 判断是不是正圆
  9. 趣图:众志成城,笑战疫情
  10. 三星S7或搭载骁龙820处理器 明年初发布