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

你。 提交于 2019-11-29 17:21:00

问题


Boost has a tutorial on how to load XML from a file. How do I feed it with a string that I either create in code or receive from a user (e.g. with cin)?


回答1:


Wrap the string in an istringstream.




回答2:


Heres some code that works for me...

// Create an empty property tree object
ptree xmlTree;

// Read the XML config string into the property tree. Catch any exception
try {
  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");
}



回答3:


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.



来源:https://stackoverflow.com/questions/5289086/how-to-feed-boost-propertytree-with-a-string-not-a-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!