92 lines
2.5 KiB
C++
92 lines
2.5 KiB
C++
/*! @file
|
|
|
|
@id $Id$
|
|
*/
|
|
// 1 2 3 4 5 6 7 8
|
|
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
|
|
|
#include <xml-cxx/xml.hxx>
|
|
#include <iostream>
|
|
#include <sstream>
|
|
|
|
//! Class with built in xml::Serialize as member, no inheritance
|
|
class A {
|
|
public:
|
|
A(): _ser("a") {
|
|
_ser.persist(a, "a");
|
|
_ser.persist(txt, "txt");
|
|
}
|
|
int a;
|
|
std::string txt;
|
|
xml::Serialize _ser;
|
|
};
|
|
|
|
//! Class that inherits xml::Serialize
|
|
class B: public xml::Serialize {
|
|
public:
|
|
int a;
|
|
std::string txt;
|
|
protected:
|
|
void initXmlMembers() {
|
|
className("b");
|
|
persist(a, "a");
|
|
persist(txt, "txt");
|
|
}
|
|
};
|
|
|
|
//! Class with external xml::Serialize
|
|
class C {
|
|
public:
|
|
int a;
|
|
std::string txt;
|
|
};
|
|
|
|
int main(int, char**) {
|
|
{ // Serialization as a member
|
|
std::stringstream ss("<a>\n"
|
|
"\t<a>1234</a>\n"
|
|
"\t<txt>Dies ist ein Serialisierungs-Test</txt>\n"
|
|
"</a>");
|
|
A a;
|
|
a._ser.loadXml(ss);
|
|
if (a.a==1234) a.a=4321;
|
|
a._ser.saveXml(std::cout)<<std::endl;
|
|
} { // Inherited Serialization
|
|
std::stringstream ss("<b>\n"
|
|
"\t<a>1234</a>\n"
|
|
"\t<txt>Dies ist ein Serialisierungs-Test</txt>\n"
|
|
"</b>");
|
|
B b;
|
|
b.loadXml(ss);
|
|
if (b.a==1234) b.a=4321;
|
|
b.saveXml(std::cout)<<std::endl;
|
|
} { // External xml::Serialize: "ser" must live in no longer than "c"!
|
|
std::stringstream ss("<c>\n"
|
|
"\t<a>1234</a>\n"
|
|
"\t<txt>Dies ist ein Serialisierungs-Test</txt>\n"
|
|
"</c>");
|
|
C c;
|
|
xml::Serialize ser(xml::Serialize("c")
|
|
.persist(c.a, "a")
|
|
.persist(c.txt, "txt"));
|
|
ser.loadXml(ss);
|
|
if (c.a==1234) c.a=4321;
|
|
ser.saveXml(std::cout)<<std::endl;
|
|
} { // Use xml::Serialize to store anything, e.g. local variables
|
|
// Important: "ser" must live in no longer than the variables!
|
|
std::stringstream ss("<d>\n"
|
|
"\t<a>1234</a>\n"
|
|
"\t<txt>Dies ist ein Serialisierungs-Test</txt>\n"
|
|
"</d>");
|
|
int a;
|
|
std::string txt;
|
|
xml::Serialize ser(xml::Serialize("d")
|
|
.persist(a, "a")
|
|
.persist(txt, "txt"));
|
|
ser.loadXml(ss);
|
|
if (a==1234) a=4321;
|
|
ser.saveXml(std::cout)<<std::endl;
|
|
}
|
|
return 0;
|
|
}
|