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

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

341885 次浏览

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

TinyXML最适合简单的XML工作,但是如果你需要更多的特性,那么试试apache项目中的Xerces。转到下一页阅读更多关于它的功能。

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

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

http://xmlsoft.org/

TiCPP是TinyXML的“更c++”版本。

“TiCPP”是官方名称tinyxml++的缩写。它是TinyXML (http://www.grinninglizard.com/tinyxml/)的一个全新接口,使用了许多c++的优点。模板、异常和更好的错误处理。在doxygen中也有完整的记录。这真的很酷,因为这个版本让你的界面和以前完全一样,或者你可以选择使用新的'ticpp'类。您所需要做的就是定义TIXML_USE_TICPP。它已经在vc6.0, vc7.0, vc7.1, vc8.0, MinGW gcc 3.4.5和Linux GNU gcc 3+中进行了测试

TinyXML,还有boost。propertytree。后者并不满足所有的官方要求,但非常简单。

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

< >强RapidXML < / >强呢?RapidXML是一个用c++编写的非常快速和小型的XML DOM解析器。它主要针对嵌入式环境、电脑游戏或任何其他需要大量内存或CPU处理能力的应用程序。RapidXML是根据Boost软件许可证授权的,其源代码是免费提供的。

特性

  • 解析速度(包括DOM树 的接近速度 函数 李相同数据。< / >
  • 在现代CPU上(2008年) 解析器吞吐量约为10亿 每秒字符数。看到 “联机”中的性能部分 李手册。< / >
  • 代码占用的内存很小 并创建DOM树
  • 一个仅头文件的实现, 简化集成过程。
  • 允许使用for的简单license 几乎任何用途,包括商业用途 而且是非商业性的,没有任何 李义务。< / >
  • 支持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模式到c++的映射:内存中的c++ /树和面向流的c++ /解析器。c++ /Tree映射是一种具有树状内存数据结构的传统映射。c++ /Parser是一种新的类似sax的映射,它将存储在XML实例文档中的信息表示为特定于词汇表的解析事件的层次结构。与c++ /Tree相比,c++ /Parser映射允许处理不适合内存的大型XML文档,执行面向流的处理,或使用现有的内存表示。

来源:wikipedia.org: / / CodeSynthesis XSD

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

希望这能有所帮助。

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

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

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