我正在寻找一个简单,干净,正确的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是一个用于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
pugixml - 用于C++的轻量级,简单快速的XML解析器非常小(与RapidXML相当),非常快(与RapidXML相当),非常易于使用(优于 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解析开销可以忽略不计,因为它是(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_Address
和soap_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,这是我一直在寻找的.
TinyXML,还有Boost.PropertyTree.后者不符合所有官方要求,但非常简单.
我喜欢Gnome xml解析器.它是开源的(MIT许可证,因此您可以在商业产品中使用它),快速且具有基于DOM和SAX的接口.
http://xmlsoft.org/