我想从std::istream
加载TinyXml文档,但它不包含这样的方法:
/** Load a file using the current document value.
Returns true if successful. Will delete any existing
document data before loading.
*/
bool LoadFile( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
/// Save a file using the current document value. Returns true if successful.
bool SaveFile() const;
/// Load a file using the given filename. Returns true if successful.
bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
/// Save a file using the given filename. Returns true if successful.
bool SaveFile( const char * filename ) const;
/** Load a file using the given FILE*. Returns true if successful. Note that this method
doesn't stream - the entire object pointed at by the FILE*
will be interpreted as an XML file. TinyXML doesn't stream in XML from the current
file location. Streaming may be added in the future.
*/
bool LoadFile( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
我看到它包含使用FILE
的函数,是否可以将std::istream
转换为FILE
?
我在这里找到了明确的解决方案:
C++风格输入:
- 基于std::istream
- 操作员>>
从流中读取XML,使其对网络传输有用。棘手的部分是知道XML文档何时完成,因为流中几乎肯定会有其他数据。TinyXML将假设XML数据在读取根元素之后是完整的。放另一种方式,使用多个错误构造的文档根元素将无法正确读取。另请注意,操作员>>是由于STL和TinyXML的限制。
示例:
std::istream *in = ResourceManager::getInstance().getResource(resourceName);
if(in) {
TiXmlDocument doc;
// load document from resource stream
*in >> doc;
}
从istream
加载整个数据,然后使用TiXmlDocument::Parse
。