XML_CPP_资料
1、TinyXML解析xml文档 - zhoubl668的专栏:远帆,梦之帆! - 博客频道 - CSDN.NET.html
http://blog.csdn.net/zhoubl668/article/details/3635320
| 
 名称  | 
 访问接口  | 
 是否支持验证  | 
 备注  | 
| 
 Expat  | 
 SAX/Local  | 
 不清楚  | 
 Local指它还有一套自己访问模型  | 
| 
 LibXML2  | 
 SAX/DOM  | 
 验证  | 
|
| 
 TinyXml  | 
 DOM  | 
 否  | 
|
| 
 XML4C  | 
 SAX/DOM  | 
 验证  | 
 不过用了ICU,国际化似乎更好  | 
| 
 Xerces-C  | 
 SAX/DOM  | 
 验证  | 
|
| 
 XML Booster  | 
 Local  | 
 不清楚  | 
 估计效率应该很高  | 
2、基于SAX的XML文档解析器分析
“
2.SAX介绍
SAX(Simple API For XML)是一个公共的基于事件的XML文档解析标准,这里我们简单介绍一下MSXML是如何通过COM接口实现SAX功能的。首先需要注意的使SAX是一个接口集合,它允许开发人员在自己的应用中通过这个接口集合来读取和分析XML文档中的数据。SAX2是当前微软最新的API。
SAX最初是为Java编程语言设计的,并使用了Java的接口定义,因为Java语言接口并不是语言中立的,所以各个厂商就需要建立自己的工具把SAX接口映射到它们自己的特殊的语言上去。微软的SAX2给VB和VC提供了接口,当然它们都有自己的接口集合映射到各自的语言和类型定义上去(比如ISAXContentHandler是VC的接口,而IVBSAXContentHandler是VB的接口)。 能够通过一个简单的,快速的方法来对XML文档进行处理,并且和DOM相比的话,它所占用的系统资源更少。我们知道,当你通过DOM来操作一个XML文件的时候,DOM读取该文件,然后把它分割成单个的对象(比如元素,属性和注释等等),然后在内存中创建一个关于该文档的树结构。使用DOM的好处是你可以引用和操作每一个对象。但是为一个文档创建一个树结构,尤其当文档尺寸很大的时候,需要大量的内存空间。
和DOM不同的是,SAX2是基于事件的,这意味着当它在一个XML文档中发现特殊的符号的时候,它会产生相关的事件。SAX2的优点是当它读到XML文档中每一部分内容的时候,就会产生一个事件,我们的应用程序就可以在这个事件中写入具体的处理代码,然后解析器就移动到文档的下一段。因为SAX2以序列的形式处理文档,它和DOM相比,对内存的需求很少。而且当SAX2找到需要的信息的时候,它能够停止对当前文档的解析。因为SAX不需要在内存中建立整个文档的树结构,SAX和DOM相比,可以被认为是一个轻量级的接口集合。
我们可以从另一个角度来理解SAX和DOM的区别,如果把它们认为是数据库的游标的话,SAX就类似是只读(read-only)和前向(forward-only)游标,而DOM更象是一个静态(static)的游标允许对记录进行遍历和更新。在开发数据库的时候,我们都知道这两种游标都有自己的适用范围而且都是非常有用的,所以SAX和DOM的作用也可以类似的进行这样的理解。SAX对XML进行处理的流程图如下所示:
2.1 SAX2和DOM相比的优点
当需要处理大的文件的时候,SAX对内存的需求很小,因为它并不会因为XML文档尺寸的增加而增加对内存的需求。SAX允许你在任何时候终止解析,这样的一个好处是如果实际上你只需要对文档的一部分信息进行处理的时候,你可以在得到该部分信息以后,就终止对文档的解析。同时,当你想要提取文档中一小部分内容的时候(对许多基于XML的应用来说,实际上没有必要读完整个XML文档),比如,你想要通过扫描数据找到文档中关于某一个特定股票的相关信息的时候,就不需要把不必要的数据放到内存里面,用SAX,你的应用能够扫描数据发现和该股票相关的信息,然后创建一个仅和该部分相关的一个文档结构,这样不仅节省了系统资源,还节省了处理时间。另外,当你想要创建一个新的文档结构时,在一些情况下,你可能想要使用SAX来创建一个高层对象的数据结构,比如股票代码和价格信息,然后和其他的XML文档的数据进行结合,而不是建立一个有关低层的元素、属性、处理指令相关的DOM结构的时候,你可以通过使用SAX更加有效的建立文档结构。特别当系统资源有限的时候,对大规模的文档来说,SAX提供了一个更加有效的方法来解析XML文档。因为SAX可以只处理文档中某一部分的信息,而DOM实际上是根据整个文档建立树状结构并放到内存中,所以如果XML文件很大的话,DOM模型对内存的需要量就很大。
2.2 SAX的缺陷
SAX模型也存在一些缺陷,因为整个文档并没有放到内存中,所以它不能随机的到达文档的某一部分,同时也因为整个文档不在内存中,开发人员必须在处理过程中按顺序处理信息,所以SAX在处理包含很多内部交叉引用的文档时就会有一些困难。不能实现复杂的搜索,同时你在处理文档部分信息的时候,必须自己考虑清楚是否保存相关的上下文信息。而且在当前的IE浏览器中还不支持SAX的实现。同时需要注意的是,DOM是已经被W3C承认的标准,而SAX还仅仅是微软自己建立的一个规范。
”
3、C++解析xml有什么好用的轮子_ - XML - 知乎.html
https://www.zhihu.com/question/32046606

4、常见C_C++ XML解析器比较 - 天缘博客.html
http://www.metsky.com/archives/578.html
5、在C++,我应该使用什么XML解析器 ?_c++_帮库.html
6、C++有啥好用的xml库? - 爱问知识人.html
http://iask.sina.com.cn/b/51994dd0e4b077f8fca080a9.html
7、XML解析库比较 - 软件开发程序员博客文章收藏网.html
http://www.programgo.com/article/28161071178/
8、
9、
XML_CPP_资料的更多相关文章
- XML_CPP_资料_libXml2_01_Code
		
ZC: 这里的代码,就是 http://www.cnblogs.com/cppskill/p/6207609.html(我的文章"XML_CPP_资料_libXml2_01 - CppSki ...
 - XML_CPP_资料_libXml2_01
		
ZC: 看了一些 C/C++的XML文章,也看了一些 Qt的 QXmlQuery/QXmlSimpleReader/QXmlStreamReader/QXmlStreamWriter 的文章.总体感觉 ...
 - XML_CPP_资料_libXml2_01_Code_ZC(?.pro)
		
ZC:最下面有 ?.pro文件的设置写法 ZC: Win7x64,qt-opensource-windows-x86-msvc2010_opengl-5.3.2.exe,cn_visual_studi ...
 - XML_CPP_资料_libxml2库函数详解
		
http://blog.csdn.net/hanchaoman/article/details/42557195 许多事物符合80/20法则,libxml中也是20%的函数提供了80%的功能.下面的列 ...
 - XML_CPP_libXml2_VC6_Code_ZC
		
ZC:iconv.dll.libxml2.dll.zlib1.dll 放到 exe所在目录下 1.代码来源于 帖子:XML_CPP_资料_libXml2_01_Code_ZC(?.pro) 2.代码: ...
 - Vim新手入门资料和一些Vim实用小技巧
		
一些网络上质量较高的Vim资料 从我07年接触Vim以来,已经过去了8个年头,期间看过很多的Vim文章,我自己觉得非常不错,而且创作时间也比较近的文章有如下这些. Vim入门 目前为阿里巴巴高级技术专 ...
 - Git入门资料汇总
		
Git是一个非常好用的版本控制工具,同时,它也是一个相对比较复杂的工具,想要掌握它还是需要花一番功夫的.网络上关于Git的入门资料已经很多了,我就不再重复了,直接把我学习的文章放在这里. Git详解 ...
 - MVC5 网站开发之七 用户功能 3用户资料的修改和删除
		
这次主要实现管理后台界面用户资料的修改和删除,修改用户资料和角色是经常用到的功能,但删除用户的情况比较少,为了功能的完整性还是坐上了.主要用到两个action "Modify"和& ...
 - webapi的学习资料
		
猿教程_-webapi教程-WebAPI教程 猿教程_-webapi教程-Web API概述 猿教程_-webapi教程-新建Web Api项目 猿教程_-webapi教程-测试Web API 猿教程 ...
 
随机推荐
- 分布式数据库主键id生成策略
			
分布式数据库部署主要分为两种,一种是读写分离.这个需要弄主从数据库.主要是写的时候写主数据库,读的时候读从数据库.分散读取压力,对于读多写少的系统有利于 提高其性能.还有一种是分布式存储,这种主要是将 ...
 - ajax解决跨域方法(适用于自己写接口解决跨域)
			
原因是这样的:最近用PHP开发了一个网站,这个网站需要提供接口,接口开发完成之后,在本地进行请求,跨域测试. jsonp处理跨域和用PHP函数来处理跨域就不说了. 现在说的使用用 header 这个来 ...
 - Eclipse中将Java项目转换成Web项目的方法(转)
			
前言: 用Eclipse开发项目的时候,把一个Web项目导入到Eclipse里会变成了一个java工程,将无法在Tomcat中进行部署运行. 方法: 1.找到.project文件,找到里面的<n ...
 - Centos6.8 防火墙设置
			
1.指令 vi /etc/sysconfig/iptables 添加以下内容和要开放的端口 # Firewall configuration written by system-config-fire ...
 - 【webpack】---模块打包机webpack基础使用---【巷子】
			
001.什么是webpack? 作用有哪些? WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,Ty ...
 - Pandas介绍
			
pandas是python非常好用的一个数据结构包,包含有许多数据操作的方法,能够让你快速简便的提取和保存数据,节省你在这块的数据流操作耗时,从而让你更加专注于逻辑的设计和算法的设计.很多算法的相关库 ...
 - 升级mac  xcode打包证书报错  git 报错
			
reset tryAgain git 在钥匙串中找不到指定的项 重新配置公钥撕咬 SSH keys An SSH key allows you to establish a secure conne ...
 - Hive与ES整合
			
https://www.elastic.co/guide/en/elasticsearch/hadoop/current/hive.html 注:添加的第三方jar必须位于namenode下,否则依然 ...
 - linux 下创建虚拟环境 python
			
virtualenv是一个可以在同一计算机中隔离多个python版本的工具.有时,两个不同的项目可能需要不同版本的python,如 python2.7 / python3.6 ,但是如果都装到一起,经 ...
 - LoadRunner-常用的函数
			
LoadRunner中,常用的函数有很多,这里只介绍编写性能测试脚本过程中那些必然用到的函数.本文重点关注这些典型函数的应用场合及注意点,至于函数详细使用说明请参见LoadRunner帮助文档. 1. ...