2012-05-06 11 views
6

Estoy buscando una forma simple de transformar en C++ un objeto en representación de cadenas XML, de esta forma podría comunicarme con un servidor.Objeto de C++ a XML para la comunicación

Por ejemplo, digamos que tengo un objeto:

class A{ 
    string data1; 
    string data2; 
    string dataN; 
    list<B> bList; 
} 

class B{ 
    string moreData; 
} 

Me gustaría que el siguiente código XML-representación: (Suponga que he creado una instancia A y tiene dos instancias de B)

<A> 
    <data1>content</data1> 
    <data2>content</data2> 
    <dataN>content</dataN> 
    <B> 
     <moreData>content</moreData> 
    </B>  
    <B> 
     <moreData>content</moreData> 
    </B> 
</A> 
+2

http://stackoverflow.com/questions/234724/how-to-serialize-in-c – m0skit0

+0

Cuál es tu pregunta? – Starkey

+0

@ m0skit0 esa es una gran biblioteca. Tomé el ejemplo [boost XML] (http://www.boost.org/doc/libs/1_36_0/libs/serialization/example/demo_xml.cpp), pero genera un XML con más información que yo quiero (por ejemplo, metadatos). correspondiente a elementos, etc.) ¿hay alguna manera de producir un resultado más simple como el que publiqué en mi pregunta? –

Respuesta

3

Lo que usted describe se conoce como Enlace de datos XML. Hay una serie de productos que generarán el código C++ de y XSD o DTD, eche un vistazo a http://www.xmldatabinding.org/ para obtener una lista y http://www.rpbourret.com/xml/XMLDataBinding.htm para obtener más información.

También eche un vistazo a este XML Data Binding example for C++, muestra el esquema fuente de ejemplo y el código generado.

Si sus esquemas son bastante básicos y usted tiene la capacidad de sintonizarlos con el generador, probablemente haya algunos proyectos de código abierto que harán el trabajo. Si está vinculando a un estándar XML, entonces se encontrará rápidamente con las limitaciones de la mayoría de los generadores. El generador Liquid XML cumple con casi todos los estándares XSD, pero tiene que pagar por ello.

2

Por lo tanto, no hay una forma estándar porque, en pocas palabras, porque no hay forma de serializar punteros y cosas por el estilo. Siempre será específico de la aplicación.

Sin embargo, puede crear su propia clase y serializar como desee.

En cuanto a los analizadores xml, ¿ha intentado this one? Es extremadamente simple, eficiente y fácil de aprender. Básicamente, hice todo con eso. Incluso puede pedirle una licencia comercial.

3

No existe una solución universal para este problema en C++, aunque existen muchas implementaciones adhoc.

Esta pregunta tiene algunos enlaces notables y cómo-tos: How to implement serialization in C++