19

Boost には、ファイルから XML をロードする方法に関するチュートリアルがあります。コードで作成した文字列またはユーザーから受け取った文字列 (例: cin) をフィードするにはどうすればよいですか?

4

3 に答える 3

13

Heresは私のために働くいくつかのコード...

// 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");
}
于 2011-12-16T15:54:58.327 に答える
12

文字列を でラップしますistringstream

于 2011-03-13T11:35:00.773 に答える
10

istringstream使用するとバッファ全体が不必要にコピーされるため、他の答えは理想的ではありません。

この質問に対する回答が示唆するように、 deprecated を使用できますistrstreamが、これにより警告が生成され、将来削除される可能性があるため、より良い解決策はboost::iostreamsを使用することです:

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

これにより、同じ方法でバッファを不必要にコピーすることが回避されistrstream(入力バッファが大きい場合、これはかなりの問題になる可能性があります)、独自のストリーム クラスを作成する必要がなくなります。

于 2016-06-08T21:06:18.900 に答える