5

Necesito escribir una aplicación linux C++ que guarda la configuración en formato XML (para una fácil edición manual) y también se comunica con aplicaciones existentes a través de mensajes XML sobre sockets y HTTP. El problema es que no he podido encontrar ninguna biblioteca inteligente que me ayude, particularmente no tengo ganas de escribir códigos DOM o SAX solo para escribir y leer algunos mensajes muy simples.C++ Serialización Limpiar XML Similar a XSTREAM

Boost Serialization era casi una coincidencia, pero agrega una gran cantidad de datos específicos de boost al xml que genera. Obviamente, esto no funciona bien para los formatos de intercambio. Me pregunto si es posible hacer que Boost Serialization o alguna otra biblioteca de serialización C++ genere xml limpio. No me importa si hay algunos atributos adicionales necesarios, como un atributo de versión, pero realmente me gustaría poder controlar sus nombres y también deshacerme de las 'características' que no uso - tracking_level y class_id para ejemplo.

Idealmente, me gustaría tener algo similar a xstream en Java. Soy consciente del hecho de que C++ carece de introspección y que, por lo tanto, es necesario hacer una codificación manual, pero sería bueno si hubiera una solución limpia para simplemente leer y escribir XML simple sin kludges.

Si esto no se puede hacer, también estoy interesado en herramientas donde el esquema XML es el recurso canónico (contrato primero), una buena alternativa JAXB a C++. Hasta ahora solo he encontrado soluciones comerciales como CodeSynthesis XSD. Preferiría soluciones de código abierto. He probado gSoap, pero genera un código realmente feo y también es específico de SOAP.

En la desesperación también comencé a buscar formatos de serialización alternativos para protobuffers. Esto existe, ¡pero solo para Java! Realmente me sorprende que los buffers de protocolo parezcan ser un formato de intercambio de datos mejor soportado que XML.

Me estoy volviendo loco solo encontrar libs para esta aplicación y realmente necesito algunas ideas nuevas. ¿Nadie?

Respuesta

0

No estoy seguro de lo que ofrece y, por lo tanto, si es lo que está buscando, pero Qt tiene un módulo xml. También tiene un módulo de red que suena como si fuera de alguna utilidad.

0

Para ampliar aún más la respuesta de Troubadour, he usado Qt's XML libraries con gran éxito haciendo algo muy parecido a lo que eres. En mi propio caso, serializo los datos de configuración a un archivo local y luego, ocasionalmente, los envío a otros hilos.

QXmlStreamWriter y QXmlStreamReader son las dos clases en cuestión. Here es un ejemplo que los usa.

Para mi propia serialización de XML, tengo control total sobre el formato real producido y solo tomó unos cientos de líneas de código para lograr. Lo mejor que puedo decir sobre el uso del XML de Qt es que podía centrarme en el contenido y dejar que las bibliotecas hicieran el doloroso trabajo de marcar los datos, lo cual es ideal.

Finalmente, here es alguna información sobre las licencias de Qt (comerciales, GPL, LGPL).

0

Una cita de la cuestión: "Hasta ahora sólo han encontrado soluciones comerciales como CodeSynthesis XSD yo preferiría soluciones de código abierto".

CodeSynthesis XSD puede ser utilizado por los proyectos de código abierto.El producto tiene una licencia propietaria Comercial pero además de que también tiene una licencia de código abierto (GPL versión 2, pero con una libertad adicional dado). Se le permite utilizarlo junto con todos "Licencias GPL-compatibles software libre" y todos los "incompatible con la GPL libres Licencias de software" que figuran en http://www.gnu.org/licenses/license-list.html

La tercera opción de licencia para CodeSynthesis XSD es un gratuito patentada Licencia para Vocabularios Pequeños. Puede usar esa licencia de forma gratuita si está utilizando un pequeño esquema XML.

Leer más acerca de las diferentes licencias CodeSynthesis XSD aquí: http://www.codesynthesis.com/products/xsd/license.xhtml

En términos de funcionalidad CodeSynthesis XSD también soporta serialización y el análisis de un formato binario generado. Puede usar ese formato para una comunicación eficiente.