2012-04-05 5 views
2

Ich habe Tutorials überall zu sehen, wie Code Synthesis xsd zu arbeiten, wenn Sie die XML in einer Datei auf Ihrem System bereitstellen, aber ich habe nicht war in der Lage, etwas über die Bereitstellung der XML als String zu finden.Code Synthesis XSD Parsing/Datenbindung XML-String anstelle von XML-Datei

Ich erhalte das XML von einer TCP-Verbindung und ich versuche, es mit Code Synthesis xsd zu analysieren, und es scheint einfach ein unnötiger zusätzlicher Schritt zum Erstellen einer XML-Datei, wenn ich es bereits im Speicher als Zeichenfolge habe.

Und ja, das ist in C++.

Antwort

2

können Sie std :: istringstream verwenden, um eine Zeichenfolge erscheinen als std :: istream zu machen und dann analysieren, dass:

#include <sstream> 

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

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

Hier root_type ist die Art und root ist der Name des Root-Element Ihrer XML . Der gleiche Ansatz funktioniert für die Serialisierung, außer Sie std :: ostringstream:

#include <sstream> 

std::ostringstream ostr; 

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

Eine Anmerkung: die Analyse tut Validierung standardmäßig, so dass die dreadded 'Instanzdokument failed' Ausnahme Parsen wird ausgelöst, wenn die XSD-Datei kann nicht sein im ausführbaren Pfad gefunden. Um auf der sicheren Seite zu sein, könnte man stattdessen versuchen: 'root_ (istr, xml_schema :: flags :: dont_validate);'. – count0

+0

@ count0: Sie können die XSD-Datei mit xml_schema :: properties angeben. Siehe zum Beispiel stackoverflow.com/a/11267720/757777 –