当前位置:  开发笔记 > 编程语言 > 正文

什么是C++最好的开放XML解析器?

如何解决《什么是C++最好的开放XML解析器?》经验,为你挑选了11个好方法。

我正在寻找一个简单,干净,正确的XML解析器,以便在我的C++项目中使用.我应该自己写吗?



1> jk...:

RapidXML怎么?RapidXML是一个用C++编写的非常快速且小巧的XML DOM解析器.它主要针对嵌入式环境,计算机游戏或任何其他可用内存或CPU处理能力非常高的应用程序.RapidXML根据Boost软件许可证授权,其源代码可免费获得.

特征

解析速度(包括DOM树构建)接近在相同数据上执行的strlen函数的速度.

在现代CPU上(截至2008年),解析器吞吐量约为每秒10亿个字符.请参阅在线手册中的性能部分.

代码的小内存占用和创建的DOM树.

仅限标头的实现,简化了集成过程.

简单许可,允许用于几乎任何商业和非商业目的,没有任何义务.

支持UTF-8和部分UTF-16,UTF-32编码.

可移植源代码,除了C++标准库的一小部分外,没有依赖关系.

该子集非常小,如果不希望使用标准库,则可以轻松地手动模拟.

限制

解析器忽略DOCTYPE声明.

不支持XML命名空间.

解析器不检查字符有效性.

解析器的接口不符合DOM规范.

解析器不检查属性唯一性.

来源:wikipedia.org : //Rapidxml


根据您的使用情况,您可以使用XML数据绑定?CodeSynthesis XSD是一个用于C++的XML数据绑定编译器,由Code Synthesis开发,并在GNU GPL和专有许可下进行双重许可.给定XML实例规范(XML Schema),它生成表示给定词汇表以及解析和序列化代码的C++类.

CodeSynthesis XSD的一个独特功能是支持两种不同的XML Schema到C++映射:内存中的C++/Tree和面向流的C++/Parser.C++/Tree映射是具有树状内存数据结构的传统映射.C++/Parser是一种类似SAX的新映射,它将存储在XML实例文档中的信息表示为特定于词汇表的解析事件的层次结构.与C++/Tree相比,C++/Parser映射允许处理大型XML文档,这些文档不适合内存,执行面向流的处理或使用现有的内存中表示.

资料来源:wikipedia.org : //CodeSynthesis XSD


我喜欢仅限标题的方法(我认为你真的需要一个头文件).只需将其扔进去,不要担心在构建过程中更改任何内容.
Hmmh.如果"解析器不检查字符有效性"和"解析器不检查属性唯一性",严格来说,它不是xml解析器 - 这些不是可选的检查,由xml规范本身强制执行.我不会浪费我的时间在这样的事情上,因为也有实际的好的解析器(例如libxml2)_
这就是我使用Rapidxml的原因.我工作的一个系统坚持在元素名称上放置非法的尾随空格 - rapidXML是唯一能够应对这种情况的人(诚然没有注意到!)

2> Zbyl..:

pugixml - 用于C++的轻量级,简单快速的XML解析器非常小(与RapidXML相当),非常快(与RapidXML相当),非常易于使用(优于 RapidXML).


哇,这是很多说法.你可以支持吗?是什么让这些领域变得更好?有参考文章吗?
在RapidXML以及pugixml网站上阅读一下我理解你(可能)的意思.RapidXML基于/ pugixml的灵感.它有很少的解析文档.pugixml有很好的解析和漂亮的API文档.(到目前为止只阅读解析.)
@Kissaki在商业产品中使用[pugixml](http://pugixml.org/)之前,我已经测试了一些XML解析器,包括一些商业解析器。

3> Rob..:

试试TinyXML.

http://sourceforge.net/projects/tinyxml


或使用TinyXML 2 http://www.grinninglizard.com/tinyxml2/index.html
在VC++和eVC++上多次使用tinyXML - 总是运行良好

4> 小智..:

TiCPP是TinyXML的"更多c ++"版本.

'TiCPP'是官方名称TinyXML ++的缩写.它是TinyXML(http://www.grinninglizard.com/tinyxml/)的全新界面,它使用了许多C++优势.模板,异常和更好的错误处理.它也完全记录在doxygen中.这真的很酷,因为这个版本让你以与以前完全相同的方式接口微小,或者你可以选择使用新的'ticpp'类.您需要做的就是定义TIXML_USE_TICPP.它已经在VC 6.0,VC 7.0,VC 7.1,VC 8.0,MinGW gcc 3.4.5以及Linux GNU gcc 3+中进行了测试



5> 小智..:

尝试这个:http: //www.applied-mathematics.net/tools/xmlParser.html
它比RapidXML或PUGXML更容易,更快.
TinyXML是"简单解析器"中最糟糕的.


但是,对于那些正在检查我的人来说只是一个警告:*更新的*版本有一个非常奇怪的许可证,你甚至无法在没有给他发送电子邮件的情况下下载它.我想我会选择pugixml.

6> yrp..:

如果您担心效率/内存管理(它往往会分配大量的小块),请不要使用TinyXML .我个人最喜欢的是RapidXML.



7> 小智..:

gSOAP怎么样?它是开源的,可以在GPL许可下免费获得.尽管名称如此,但gSOAP工具包是一种通用的XML数据绑定工具,允许您自动将C和C++数据绑定到XML.无需使用XML解析器API,只需让它以XML格式读取/写入您的数据.如果你真的需要一个超级简单的C++ XML解析器,那么gSOAP可能是一种过度杀伤力.但是,自2001年引入gSOAP以来,随着许多工业应用的推荐,它已经运行良好.

以下是一个简要的功能列表:

便携式:Windows,Linux,Mac OS X,Unix,VxWorks,Symbian,Palm OS,WinCE等.

占用空间小:73KB代码和少于2K的数据,用于实现XML Web服务客户端应用程序(没有DOM限制内存使用).

快速:不要相信其他工具所声称的,真正的速度应该 I/O 来衡量.对于gSOAP,它通过TCP/IP传输超过3000条往返XML消息.XML解析开销可以忽略不计,因为它是(de)序列化发生时输入/输出的简单线性扫描.

XML支持:XML模式(XSD)导入/导出,WSDL导入/导出,XML名称空间,XML规范化,带附件的XML(MIME),DOM的可选使用,使用缩进生成XML的许多选项,使用UTF8字符串等.

XML验证:部分和完整(选项)

WS支持:WS-Security,WS-ReliableMessaging,WS-Addressing,WS-Policy,WS-SecurityPolicy等.

调试:集成内存管理与泄漏检测,日志记录.

API:没有API学习,只有"soap"引擎上下文初始化,然后使用读/写接口为您的数据,以及"肥皂"引擎上下文破坏.

例如:

class Address
{ 
  std::string name;
  std::vector number;
  time_t date;
};

然后在Address上面的类声明上运行"soapcpp2" 以生成soap_read_Addresssoap_write_AddressXML读取器和编写器,例如:

Address *a = new Address();
a = ...;
soap ctx = soap_new();
soap_write_Address(ctx, a);
soap_end(ctx);
soap_free(ctx);`

这将生成Address a对象的XML表示形式.通过使用XML命名空间详细信息(此处未显示)注释头文件声明,这些工具还会生成模式.这是一个简单的例子.gSOAP工具可以处理各种各样的C和C++数据类型,包括基于指针的链接结构和甚至(循环)图形(而不仅仅是树).

希望这可以帮助.


对于商业用途,您必须为gSoap支付一次性费用

8> Raminder..:

TinyXML最适合简单的XML工作,但如果您需要更多功能,请从apache项目中尝试Xerces.转到下一页以阅读有关其功能的更多信息.

http://xerces.apache.org/xerces-c/


Xerces表示ENTIRe xml标准.TinyXML的实际应用非常有用.事实证明,99%或者用户只会使用1%的XML标准,因此TinyXML通常就足够了.

9> godspeedelbo..:

我是一个C++ 新手,在这个页面上尝试了几个不同的建议后,我必须说我最喜欢pugixml.它具有易于理解的文档和高级API,这是我一直在寻找的.



10> Lev..:

TinyXML,还有Boost.PropertyTree.后者不符合所有官方要求,但非常简单.


`Boost.PropertyTree`非常适合我的简单数据存储.[这是页面](http://www.boost.org/doc/libs/1_42_0/doc/html/boost_propertytree/tutorial.html),明确了如何使用它.哇,我喜欢提升.

11> dicroce..:

我喜欢Gnome xml解析器.它是开源的(MIT许可证,因此您可以在商业产品中使用它),快速且具有基于DOM和SAX的接口.

http://xmlsoft.org/

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有