What is the best open XML parser for C++?
I am looking for a simple, clean, correct XML parser to use in my C++ project. Should I write my own?
How about RapidXML? RapidXML is a very fast and small XML DOM parser written in C++. It is aimed primarily at embedded environments, computer games, or any other applications where available memory or CPU processing power comes at a premium. RapidXML is licensed under Boost Software License and its source code is freely available.
- 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.
- The parser ignores DOCTYPE declarations.
- There is no support for XML namespaces.
- The parser does not check for character validity.
- The interface of the parser does not conform to DOM specification.
- The parser does not check for attribute uniqueness.
Depending on you use, you may use an XML Data Binding? CodeSynthesis XSD is an XML Data Binding compiler for C++ developed by Code Synthesis and dual-licensed under the GNU GPL and a proprietary license. Given an XML instance specification (XML Schema), it generates C++ classes that represent the given vocabulary as well as parsing and serialization code.
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.
Read more... Read less...
TiCPP is a "more c++" version of TinyXML.
'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+
try this one:
it's easier and faster than RapidXML or PUGXML.
TinyXML is the worst of the "simple parser".