views:

107

answers:

1

Suppose I have a structure in C or C++, such as:

struct ConfigurableElement {
   int ID;
   char* strName;
   long prop1;
   long prop2;
   ...
};

I would like to load/save it to/from the following XML element:

 <ConfigurableElement ID="1" strName="namedElem" prop1="2" prop2="3" ... />

Such a mapping can be trivially done in Java/C# or any other language with run-time reflection for the matter. Can it be done in any non-tedious way in C++ with macros/template trickery?

Bonus points for handling nested structures/unions.

+2  A: 

The technique you want is called serialization. You may want to read these articles:

http://www.codeproject.com/KB/cpp/xmlserialization.aspx

http://www.codesynthesis.com/products/xsd/ <=== Very close to what you want!

http://www.artima.com/cppsource/xml_data_binding.html

http://www.ibm.com/developerworks/xml/library/x-serial.html

http://www.firstobject.com/xml-serialization-in-c++.htm

EDIT:

There is another option for you: Xmlize provided by Ultimatepp:

http://www.ultimatepp.org/reference$Xmlize.html

http://www.ultimatepp.org/reference$Xmlize$en-us.html

http://www.ultimatepp.org/reference$XmlizeCustomValue$en-us.html

http://www.ultimatepp.org/reference$Xmlize_std$en-us.html

http://www.ultimatepp.org/reference$XML$en-us.html

Viet
I know what serialization is. I am interested in *human-readable* serialization in the exact format specified. But the XSD one might actually be interesting.
EFraim
a few more - http://codesynthesis.com/products/xsd/ http://gsoap2.sourceforge.net/
Nick
Viet