Boost有tutorial on how to load XML from a file。如何使用我以代碼創建的字符串或從用戶接收的字符串(例如使用cin
)來提供它?如何使用字符串而不是文件提供Boost.PropertyTree?
14
A
回答
10
將字符串包裝在istringstream
中。
11
繼承人一些代碼,爲我的作品...
// 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");
}
4
其他的答案是不理想的,因爲使用istringstream
不必要拷貝整個緩衝區。
上this question的答案表明,你可以使用過時istrstream
,但因爲這會產生警告,並可能在將來被刪除,一個更好的解決方案是使用boost::iostreams:
boost::iostreams::stream<boost::iostreams::array_source> stream(moo.c_str(), moo.size());
boost::property_tree::read_json(stream, tree);
這避免了不必要的複製緩衝區的方式與istrstream
的方法相同(如果輸入緩衝區很大,這可能是一個相當大的問題),並且不必編寫自己的流類。
相關問題
- 1. DBReader提供字符串的長度而不是字符串
- 2. 如何使用變量而不是文字字符串?
- 3. 「提供」模型的方法,而不是字符串
- 4. C++ wstring文件,而不是字符串
- 5. 試圖使用文本文件而不是字符串變量
- 6. 如何向Java stax解析器提供大塊字符串而不是InputStreams?
- 7. 上傳文件提供字符串文件名,而不是文件或StringIO對象
- 8. DOS/Windows xmlstarlet使用字符串而不是xml文件
- 9. 包含 - 使用字符串而不是文件名
- 10. 如何從字符串而不是文件渲染Zend_View腳本
- 11. 使用字符串而不是「回聲」?
- 12. C++ _bstr_t而不是使用字符串
- 13. 如何在C#中使用TcpClient字符串而不是字節?
- 14. 如何在滑塊中使用字符串而不是數字?
- 15. 如何提供字符串的ObjectContent
- 16. 如何從文件中讀取字符串而不使用字符數組?
- 17. 如何在字符串而不是文件上使用模板工具包?
- 18. NaiveScript:如何使用xml文件構建模塊,而不是模板字符串
- 19. 是否可以在不提供輸入文件的情況下調用xsl Apache FOP,而是傳遞字符串
- 20. 強制Visual Studio 2010使用字符串而不是字符串
- 21. 如何發送JSON字符串,而不是URL字符串
- 22. 如何將字符串轉換爲pyc文件而不使用py文件?
- 23. 從字符串中提取電子郵件,而不是從字符串整行
- 24. 執行shell不打開文件提供的字符串
- 25. ViewData使用變量而不是文字字符串
- 26. 如何僅使用xaml中提供的名稱字符串來使用事件?
- 27. 如何使用字符串而不是流?
- 28. 如何使用cin獲取字符串而不是硬編碼?
- 29. 如何在Pattern類中使用變量而不是字符串?
- 30. 如何使用字符串變量,而不是srting器類