当前位置: 首页 > article >正文

tinyxml和rapidxml

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.  
  14.     rapidxml::print(std::back_inserter(text), doc, 0);  
  15.     // write text to file by yourself  
  16. }  

下面是使用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比较

http://www.lryc.cn/news/2416376.html

相关文章:

  • Windows上Qt开发环境搭建
  • 浅析入侵检测系统及最新研究
  • 攻防世界-easyphp 思路分析
  • 文献翻译 | Frequency Domain De-correlation Parameter in Speech Noise Reduction System Based on Frequency
  • java web配置servlet实现图像验证码
  • artDialog的使用笔记
  • 冰河木马简易使用 ——病毒木马 003
  • 饼状图(PieChart)与柱形图(BarChart)的使用
  • 【视频编解码】H264入门
  • 你们大学还用Protel 99 SE、51单片机吗?
  • ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务【解决思路】
  • 【小呆的力学笔记】弹塑性力学的初步认知三:广义胡克定律
  • linux mrtg 命令,linux服务器之流量监控(MRTG)
  • 【修复版】免费微信小游戏源码h5赛马php网页开源可二次开发,附安装教程
  • css单线边框_css border-collapse设置表格单线边框和双线边框
  • Linux AVG ANTIVIRUS FREE使用介绍
  • CPE上的STUN和TR069功能详解和实验
  • Divx编解码器的研究与设计
  • 系统结构期末复习(四)指令级并行
  • deleteRow() 连续删除多行
  • js发送邮件
  • 怎么查看文件的MD5码
  • 一、 QTP的前世今生
  • 基于VirtualBox虚拟机安装Ubuntu图文教程
  • jersey 入门示例_Jersey Web Service Hello World Java示例
  • 12款国内外企业协作工具推荐
  • SEO数据监控技巧都有哪些?
  • 如何优化网页加载速度?
  • 如何利用Python监控你女/男朋友每天都在浏览什么网站?
  • 表白,整人,无门槛,娱乐代码