|
Boost : |
Subject: [boost] [ANN] libstudxml - modern XML API for C++
From: Boris Kolpackov (boris_at_[hidden])
Date: 2014-05-21 10:53:39
Hi,
libstudxml is an XML library for modern, standard C++. It has an API
that I believe should have already been in Boost or even in the C++
standard library.
The API was first presented at the C++Now 2014 conference. Based on
the positive feedback and encouragement I received during the talk,
I've decided to make the implementation generally available.
As an example, we can parse this XML:
<person id="123">
<name>John Doe</name>
<age>23</age>
<gender>male</gender>
</person>
With the following C++ code, which performs all the validation
necessary for this XML vocabulary:
enum class gender {...};
ifstream ifs (argv[1]);
parser p (ifs, argv[1]);
p.next_expect (parser::start_element, "person", content::complex);
long id = p.attribute<long> ("id");
string n = p.element ("name");
short a = p.element<short> ("age");
gender g = p.element<gender> ("gender");
p.next_expect (parser::end_element); // person
The API has the following interesting features:
* Streaming pull parser and streaming serializer
* Two-level API: minimum overhead low-level & more convenient high-level
* Content model-aware (empty, simple, complex, mixed)
* Whitespace processing based on content model
* Validation based on content model
* Validation of missing/extra attributes
* Validation of unexpected events (elements, etc)
* Data extraction to value types
* Attribute map with extended lifetime (high-level API)
libstudxml is compact, external dependency-free, and reasonably
efficient. The XML parser is a conforming, non-validating XML 1.0
implementation that is based on tested and proven code. The library
is released under the MIT license.
More information, documentation, and source code are available from:
http://www.codesynthesis.com/projects/libstudxml/
Or, you can jump directly to the API description with examples:
http://www.codesynthesis.com/projects/libstudxml/doc/intro.xhtml#2
Enjoy,
Boris
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk