我正在寻找一个简单,干净,正确的XML解析器,以便在我的C ++项目中使用。我应该自己写吗?
答案 0 :(得分:118)
RapidXML怎么样? RapidXML是一个用C ++编写的非常快速且小巧的XML DOM解析器。它主要针对嵌入式环境,计算机游戏或任何其他可用内存或CPU处理能力非常高的应用程序。 RapidXML根据Boost软件许可证授权,其源代码可免费获得。
功能强>
<强>限制强>
根据您的使用情况,您可以使用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文档,这些文档不适合内存,执行面向流的处理或使用现有的内存中表示。
答案 1 :(得分:96)
pugixml - 用于C ++的轻量级,简单快速的XML解析器 非常小(与RapidXML相当),非常快(与RapidXML相当),非常易于使用(更好比RapidXML)。
答案 2 :(得分:40)
尝试使用TinyXML。
答案 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以来,许多工业应用都证明了它的一切功能。
以下是一些简要的功能列表:
例如:
class Address
{
std::string name;
std::vector<LONG64> 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 ++数据类型,包括基于指针的链接结构和甚至(循环)图形(而不仅仅是树)。
希望这有帮助。
答案 7 :(得分:9)
TinyXML最适合简单的XML工作,但如果您需要更多功能,请从apache项目中尝试Xerces。转到下一页以了解有关其功能的更多信息。
答案 8 :(得分:9)
我是C ++ 新手,在此页面上尝试了几个不同的建议后,我必须说我最喜欢pugixml。它有很容易理解的文档和高级API,这是我一直在寻找的。 p>
答案 9 :(得分:8)
TinyXML,还有Boost.PropertyTree。后者不符合所有官方要求,但非常简单。
答案 10 :(得分:7)
我喜欢Gnome xml解析器。它是开源的(MIT许可证,因此您可以在商业产品中使用它),速度快,并且具有基于DOM和SAX的接口。
答案 11 :(得分:2)