94 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*! @file
 | 
						|
 | 
						|
    @id $Id$
 | 
						|
*/
 | 
						|
//       1         2         3         4         5         6         7         8
 | 
						|
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
 | 
						|
 | 
						|
// g++ -I../../src ../../src/xml.cxx serialization.cxx
 | 
						|
 | 
						|
#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;
 | 
						|
}
 |