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


当前回答

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

特性

Parsing speed (including DOM tree building) approaching speed of strlen function executed on the same data. On a modern CPU (as of 2008) the parser throughput is about 1 billion characters per second. See Performance section in the Online Manual. Small memory footprint of the code and created DOM trees. A headers-only implementation, simplifying the integration process. Simple license that allows use for almost any purpose, both commercial and non-commercial, without any obligations. Supports UTF-8 and partially UTF-16, UTF-32 encodings. Portable source code with no dependencies other than a very small subset of C++ Standard Library. This subset is so small that it can be easily emulated manually if use of standard library is undesired.

限制

解析器忽略DOCTYPE 声明。 不支持XML名称空间。 解析器不会检查 字符的有效性。 解析器的接口没有 符合DOM规范。 解析器不会检查 属性的独特性。

来源:wikipedia.org Rapidxml: / /


根据您的使用,您可以使用XML数据绑定?CodeSynthesis XSD是一个由CodeSynthesis开发的c++ XML数据绑定编译器,在GNU GPL和私有许可证下双重授权。给定一个XML实例规范(XML Schema),它生成表示给定词汇表以及解析和序列化代码的c++类。

One of the unique features of CodeSynthesis XSD is its support for two different XML Schema to C++ mappings: in-memory C++/Tree and stream-oriented C++/Parser. The C++/Tree mapping is a traditional mapping with a tree-like, in-memory data structure. C++/Parser is a new, SAX-like mapping which represents the information stored in XML instance documents as a hierarchy of vocabulary-specific parsing events. In comparison to C++/Tree, the C++/Parser mapping allows one to handle large XML documents that would not fit in memory, perform stream-oriented processing, or use an existing in-memory representation.

来源: wikipedia.org://CodeSynthesis XSD

其他回答

TinyXML试试。

http://sourceforge.net/projects/tinyxml

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

特性

Parsing speed (including DOM tree building) approaching speed of strlen function executed on the same data. On a modern CPU (as of 2008) the parser throughput is about 1 billion characters per second. See Performance section in the Online Manual. Small memory footprint of the code and created DOM trees. A headers-only implementation, simplifying the integration process. Simple license that allows use for almost any purpose, both commercial and non-commercial, without any obligations. Supports UTF-8 and partially UTF-16, UTF-32 encodings. Portable source code with no dependencies other than a very small subset of C++ Standard Library. This subset is so small that it can be easily emulated manually if use of standard library is undesired.

限制

解析器忽略DOCTYPE 声明。 不支持XML名称空间。 解析器不会检查 字符的有效性。 解析器的接口没有 符合DOM规范。 解析器不会检查 属性的独特性。

来源:wikipedia.org Rapidxml: / /


根据您的使用,您可以使用XML数据绑定?CodeSynthesis XSD是一个由CodeSynthesis开发的c++ XML数据绑定编译器,在GNU GPL和私有许可证下双重授权。给定一个XML实例规范(XML Schema),它生成表示给定词汇表以及解析和序列化代码的c++类。

One of the unique features of CodeSynthesis XSD is its support for two different XML Schema to C++ mappings: in-memory C++/Tree and stream-oriented C++/Parser. The C++/Tree mapping is a traditional mapping with a tree-like, in-memory data structure. C++/Parser is a new, SAX-like mapping which represents the information stored in XML instance documents as a hierarchy of vocabulary-specific parsing events. In comparison to C++/Tree, the C++/Parser mapping allows one to handle large XML documents that would not fit in memory, perform stream-oriented processing, or use an existing in-memory representation.

来源: wikipedia.org://CodeSynthesis XSD

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

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

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

'TiCPP' is short for the official name TinyXML++. It is a completely new interface to TinyXML (http://www.grinninglizard.com/tinyxml/) that uses MANY of the C++ strengths. Templates, exceptions, and much better error handling. It is also fully documented in doxygen. It is really cool because this version let's you interface tiny the exact same way as before or you can choose to use the new 'ticpp' classes. All you need to do is define TIXML_USE_TICPP. It has been tested in VC 6.0, VC 7.0, VC 7.1, VC 8.0, MinGW gcc 3.4.5, and in Linux GNU gcc 3+