How to feed Boost.PropertyTree with a string, not a file? How to feed Boost.PropertyTree with a string, not a file? xml xml

How to feed Boost.PropertyTree with a string, not a file?


Heres some code that works for me...

// Create an empty property tree objectptree xmlTree;// Read the XML config string into the property tree. Catch any exceptiontry {  stringstream ss; ss << xmlConfigString;  read_xml(ss, xmlTree);}catch (xml_parser_error &e) {  LOGERROR ("Failed to read config xml " << e.what());}catch (...) {  LOGERROR ("Failed to read config xml with unknown error");}


The other answers are non-ideal, because using istringstream needlessly copies the entire buffer.

As an answer on this question suggests, you could use the deprecated istrstream, but as this generates warnings and may be removed in future, a better solution is to use boost::iostreams:

boost::iostreams::stream<boost::iostreams::array_source> stream(moo.c_str(), moo.size());boost::property_tree::read_json(stream, tree);

This avoids needlessly copying the buffer in the same way istrstream did (which can be a considerable problem, if your input buffer is large), and saves you having to write your own stream class.