2012-04-05 11 views
2

システム上のファイルにxmlを提供する場合、コード合成xsdを動作させる方法を説明するチュートリアルがありますが、 xmlを文字列として提供することについて何かを見つけることができました。コード合成XSD解析/データバインディングxmlファイルの代わりにxml文字列

TCP接続からxmlを受信して​​いますが、これをCode Synthesis xsdで解析しようとしていますが、既にメモリに文字列として格納されているときにxmlファイルを作成する無駄な追加手順のようです。

はい、これはC++です。ここでroot_typeがタイプであり、根があなたのXMLのルート要素の名前です

#include <sstream> 

std::string str = ... // Input XML in a string. 
std::istringstream istr (str); 

std::auto_ptr<root_type> r = root (istr); 

答えて

2

あなたはそれを解析し、その後のstd ::はistreamとして表示される文字列を作るためにはstd :: istringstreamを使用してすることができます。あなたはSTDを使用する以外は同様のアプローチは、直列化のために働く:: ostringstream:

#include <sstream> 

std::ostringstream ostr; 

root (ostr, *r, ...); 
std::string str = ostr.str() // Output XML in a string. 
+1

注:構文解析は、デフォルトでは、検証を行い、そのの.xsdファイルができない場合にfailed'例外を解析しdreadded 'インスタンス文書がスローされます実行可能パスにあります。安全な側にいるためには、代わりに 'root_(istr、xml_schema :: flags :: dont_validate);'を試してみてください。 – count0

+0

@ count0:xml_schema :: propertiesでXSDファイルを指定できます。たとえば、stackoverflow.com/a/11267720/757777を参照してください。 –

関連する問題