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

What is the best open XML parser for C++?

本文关键字:XML 开放式 C++ 什么      更新时间:2023-10-16

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

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

功能

  • 解析速度(包括DOM树建筑物)接近速度在上执行的strlen函数相同的数据
  • 在现代CPU上(截至2008年)解析器吞吐量约为10亿每秒字符数。看见在线中的性能部分手册
  • 代码占用的内存较小并创建DOM树
  • 仅头的实现,简化了集成过程
  • 允许使用的简单许可证几乎任何用途,都是商业用途和非商业性的,没有任何义务
  • 支持UTF-8和部分UTF-16,UTF-32编码
  • 不带的可移植源代码除了非常小的依赖项C++标准库的子集
  • 这个子集非常小,可以如果使用,可以很容易地手动模拟的标准库是不希望的

限制

  • 分析器忽略DOCTYPE声明
  • 不支持XML命名空间
  • 解析程序不检查字符有效性
  • 解析程序的接口没有符合DOM规范
  • 解析程序不检查属性唯一性

来源:维基百科。org://Rapidxml


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

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

来源:维基百科。org://CodeSynthesisXSD

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

尝试TinyXML。

http://sourceforge.net/projects/tinyxml

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可能是一种过度使用。但在其他方面,自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解析开销可以忽略不计,因为它是在进行(反)序列化时对输入/输出进行的简单线性扫描
  • 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"引擎上下文,然后使用读/写接口对您的数据进行读取,并销毁"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/

TinyXML,以及Boost.PropertyTree。后者不能满足所有官方要求,但非常简单。

我是一个C++新手,在这个页面上尝试了几个不同的建议后,我必须说我最喜欢puixml。它有易于理解的文档和高水平的API,这正是我所寻找的。

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

http://xmlsoft.org/

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