Ответ 1
Оберните строку в istringstream
.
Boost имеет учебник по загрузке XML из файла. Как передать его строкой, которую я либо создаю в коде, либо получаю от пользователя (например, с помощью cin
)?
Оберните строку в istringstream
.
Вот какой код работает для меня...
// 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");
}
Другие ответы не идеальны, потому что использование istringstream
без необходимости копирует весь буфер.
Как следует из ответа на этот вопрос, вы можете использовать устаревший istrstream
, но поскольку это генерирует предупреждения и может быть удалено в будущем, лучшим решением будет использовать boost:: iostreams:
boost::iostreams::stream<boost::iostreams::array_source> stream(moo.c_str(), moo.size());
boost::property_tree::read_json(stream, tree);
Это позволяет избежать ненужного копирования буфера тем же способом istrstream
(что может быть значительной проблемой, если ваш входной буфер является большим) и сохраняет необходимость писать собственный класс потока.