[Interest] [ANN] libstudxml - modern XML API for C++

Boris Kolpackov boris at codesynthesis.com
Wed May 21 16:48:00 CEST 2014


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



More information about the Interest mailing list