2009-01-15 10 views
24

Tengo que escribir una aplicación C++ (utilizando el Marco Qt para la GUI) que puede editar datos almacenados en archivos xml descritos por un archivo de esquema xsd. ¿Hay alguna herramienta para convertir el esquema xsd en clases C++?Esquema XML a las clases C++

Respuesta

23

Me parece que CodeSynthesis es exactamente lo que está buscando. Es de código abierto y C++.

+18

Vale la pena señalar que * open source * es un poco complicado aquí. El código generado por * CodeSynthesis * también está cubierto por la licencia GPL, por lo que no puede usarlo en su aplicación sin distribuir el código fuente de toda su aplicación. Sin embargo, hay excepciones para [bajo volumen de uso] (http://www.codesynthesis.com/products/xsd/free-license.xhtml) o licencia de propiedad para comprar. – Jarekczek

3

Altova XML Spy puede generar C++ desde un XSD, es comercial pero hay una versión de prueba gratuita de 30 días si quiere probarlo.

0

Hay una herramienta de Microsoft que hace esto, creo, llamado xsd.exe (pero yo no lo he probado).

+8

Podría estar equivocado, pero parece que esto no es compatible con C++, solo .Net C#, VB y J # – Andre

+5

xsd.exe no admite C++ estándar, solo C++ "administrado" de Microsoft que usa el material CLR XML. – Matthew

3

gSOAP Toolkit ¡puede hacer esto también! Es liviano y admite C/C++. Ya lo he utilizado en proyectos muy exigentes con éxito. Además, está licenciado bajo GPL2.

Portabilidad: gSOAP es compatible con la mayoría de las plataformas, incluidos los sistemas integrados y el sistema operativo pequeño (por ejemplo, WinCE, Symbian y PalmOS). La portabilidad está probada para Windows (98, XP, Vista), Linux, Unix, Mac OS X, Solaris, HP-UX, AIX, FreeBSD, TRU64, Irix, QNX y VxWorks.

+3

Parece tener la misma limitación de licencia que el generador de CodeSynthesis. –

0

Todos los generadores son absolutamente terrible.

XSD describe una jerarquía de clases en la que las clases contienen subclases, que pueden contener otras subclases y todo lo que desea hacer es representarlo de la misma manera.

Por ejemplo, si este es el esquema:

<xs:element name="shipto"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="name" type="xs:string"/> 
     <xs:element name="address" type="xs:string"/> 
     <xs:element name="city" type="xs:string"/> 
     <xs:element name="country" type="xs:string"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

Lo que quiere producir algo como:

class shipTo 
{ 
    private: 
    string name; 
    string address; 
    string city; 
    string country; 

    public: 
    set_Name(); 
    get_Name(); 
    ... 
} 

no vas a encontrarlo. Lo más parecido que he encontrado es xjc, que es para Java.

Esperaría algo tan BÁSICO como esta funcionalidad existiría, pero todavía no lo he encontrado, y sí, he usado Altova XML-Spy. Estoy seriamente sorprendido de que alguien sugiera esto como un generador de código. Su código generado es absolutamente horrible.

Estoy escribiendo un analizador lex/bison para hacer esto para mi proyecto porque todas las herramientas que he podido encontrar hasta ahora producen un código bastante horrible. Altova tiene un período de prueba de 30 días, si no me cree, pruébelo. Es más fácil escribir un analizador lex/bison para mi XSD que utilizar un paquete de código profesional de $ 500 que produce una terrible representación de clase.

No puedo creer que la gente haga uso de XML en C++ porque las herramientas para ello son terribles.

+0

¿Puede mostrarnos un ejemplo de lo que producen las "malas herramientas" y explicar por qué cree que es malo? –

+0

No puedo en una respuesta ya que estoy atascado en el "formato de mini-Markdown" aquí. Le di un esquema de ejemplo: siga adelante y ejecute el espía Altova XML en él y compárelo con el ejemplo MIS rodado manual XSD-> C++ lex/bison/hack produce. Adelante. No estoy MENOS impresionado con las herramientas disponibles. XJC produce código bastante bueno, sin embargo, está en Java, por lo que no es adecuado para mí. Siento que estoy trabajando con cuchillos de piedra y pieles de oso. – user6269400

+0

No haga que Altova espíe ... vea su estructura de clase propuesta y acuerde que parece razonable. Tal vez puedas explicar en 1-2 frases lo que hace Altova y que no te gusta. –

Cuestiones relacionadas