c++ xml boost input boost-propertytree

c++ - ¿Cómo alimentar Boost.PropertyTree con una cadena, no un archivo?



xml input (3)

Aquí hay un código que funciona para mí ...

// 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"); }

Boost tiene un tutorial sobre cómo cargar XML desde un archivo . ¿Cómo puedo alimentarlo con una cadena que creo en el código o que recibo de un usuario (por ejemplo, con cin )?



Las otras respuestas no son ideales porque el uso de istringstream copia innecesariamente todo el buffer.

Como sugiere una respuesta a esta pregunta , podría utilizar el istrstream desuso, pero como esto genera advertencias y puede eliminarse en el futuro, una mejor solución es usar boost :: iostreams :

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

Esto evita copiar innecesariamente el búfer de la misma forma que istrstream hizo istrstream (que puede ser un problema considerable, si su búfer de entrada es grande), y le ahorra tener que escribir su propia clase de transmisión.