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

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

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是由Code Synthesis开发的用于C ++的XML数据绑定编译器,在GNU GPL和专有许可下获得双重许可。 给定一个XML实例规范(XML Schema),它生成代表给定词汇以及解析和序列化代码的C ++类。

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

来源: wikipedia.org : CodeSynthesis XSD

pugixml – 用于C ++的轻量级,简单快速的XML解析器非常小(与RapidXML相比),非常快(与RapidXML相比),非常易于使用(比RapidXML 更好 )。

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+

试试这个: http : //www.applied-mathematics.net/tools/xmlParser.html
它比RapidXML或PUGXML更简单快捷。
TinyXML是“简单的解析器”中最糟糕的。

如果你关心效率/内存管理(它倾向于分配大量的小块),不要使用TinyXML。 我个人最喜欢的是RapidXML 。

gSOAP呢? 它是开源的,可以在GPL许可下免费获得。 尽管它的名字,gSOAP工具包是一个通用的XML数据绑定工具,并允许您自动将您的C和C ++数据绑定到XML。 不需要使用XML解析器API,只需让它以XML格式读取/写入数据即可。 如果你真的需要一个超级简单的C ++ XML解析器,那么gSOAP可能是一个矫枉过正的问题。 但自从gSOAP在2001年推出以来,其他所有方面的表现都很好,因为许多工业应用都有这样的评价。

这里是一个简要的功能列表:

  • 便携式: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<LONG64> number; time_t date; };

然后在上面的Address类声明中运行“soapcpp2”来生成soap_read_Addresssoap_write_Address XML读写器,例如:

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 ++数据类型,包括基于指针的链接结构和甚至(循环)图形(而不仅仅是树)。

希望这可以帮助。

TinyXML对于简单的XML工作来说可能是最好的,但是如果你需要更多的功能,那么就试试apache项目中的Xerces。 转到下一页阅读更多关于它的功能。

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

我是一个C ++ 新手 ,在尝试了几个不同的建议后,我必须说我最喜欢pugixml 。 它很容易理解的文档和一个高层次的API,这是我一直在寻找。

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

http://xmlsoft.org/

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

尝试TinyXML或IrrXML …都是轻量级的XML解析器(无论如何,我建议你使用TinyXML)。