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

时间:2008-10-04 17:21:35

标签: c++ xml open-source

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

12 个答案:

答案 0 :(得分:118)

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

答案 1 :(得分:96)

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

答案 2 :(得分:40)

答案 3 :(得分:16)

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 +中进行了测试

答案 4 :(得分:14)

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

答案 5 :(得分:12)

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

答案 6 :(得分:10)

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等。
  • 占用空间小:实现XML Web服务客户端应用程序的73KB代码和少于2K的数据(没有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 ++数据类型,包括基于指针的链接结构和甚至(循环)图形(而不仅仅是树)。

希望这有帮助。

答案 7 :(得分:9)

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

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

答案 8 :(得分:9)

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

答案 9 :(得分:8)

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

答案 10 :(得分:7)

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

http://xmlsoft.org/

答案 11 :(得分:2)

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