2011-03-13 5 views
14

बूस्ट में tutorial on how to load XML from a file है। मैं इसे एक स्ट्रिंग के साथ कैसे खिला सकता हूं जिसे मैं या तो कोड में बनाता हूं या उपयोगकर्ता से प्राप्त करता हूं (उदा। cin के साथ)?Boost.PropertyTree को स्ट्रिंग के साथ कैसे फ़ीड करें, फ़ाइल नहीं?

उत्तर

11

Heres कुछ कोड है कि मेरे लिए काम करता ... क्योंकि 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"); 
} 
4

अन्य उत्तर, गैर आदर्श हैं।

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 किया (यदि आपका इनपुट बफर बड़ा है, तो एक बड़ी समस्या हो सकती है), और आपको अपनी स्ट्रीम कक्षा लिखने के लिए बचाता है।

संबंधित मुद्दे