1

から TinyXml ドキュメントをロードしたいのですstd::istreamが、そのようなメソッドが含まれていません:

/** 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か?

4

2 に答える 2

2

ここで明確な解決策を見つけました:

C++ スタイルの入力:

  • std::istream に基づく
  • オペレーター>>

ストリームから XML を読み取り、ネットワーク転送に役立ちます。ストリームにはほぼ確実に他のデータが存在するため、XML ドキュメントがいつ完成するかを知るのは難しい部分です。TinyXML は、ルート要素を読み取った後、XML データが完全であると想定します。別の言い方をすれば、複数のルート要素で構成されていない文書は正しく読み取れません。また、operator>> は、STL の実装と TinyXML の制限の両方により、Parse よりもやや遅いことに注意してください。

例:

std::istream *in = ResourceManager::getInstance().getResource(resourceName);
if(in) {
   TiXmlDocument doc;
   // load document from resource stream
   *in >> doc;
}
于 2012-09-09T12:04:13.353 に答える
1

からデータ全体をロードしてから、istreamを使用しますTiXmlDocument::Parse

于 2012-09-09T11:02:41.490 に答える