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
Me parece que CodeSynthesis es exactamente lo que está buscando. Es de código abierto y C++.
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.
Hay una herramienta de Microsoft que hace esto, creo, llamado xsd.exe (pero yo no lo he probado).
Codalogic LMX es también una opción.
Objective Systems, Inc. XBinder XML Schema Compiler (no solo para C++).
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.
Parece tener la misma limitación de licencia que el generador de CodeSynthesis. –
Ver XmlPlus-xsd2cpp en Google:
XmlPlus xsd2cpp ofrece "fácil de usar" C++ XML enlace de datos a través W3C XML Schema.
Uso de XmlPlus está cubierto por el GNU Lesser General Public License
Tenga en cuenta que la herramienta no es BY Google, solo se aloja en Google Code. – Beginner
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.
¿Puede mostrarnos un ejemplo de lo que producen las "malas herramientas" y explicar por qué cree que es malo? –
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
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. –
- 1. Esquema XML a clases Java con XJC
- 2. C++ Generador de código de esquema XML
- 3. Generar clases C# del esquema JSON
- 4. Múltiples archivos de esquema XSD a clases C#
- 5. Cómo hacer que las clases generadas contengan Javadoc desde la documentación del esquema XML
- 6. Generar esquema de Json a partir del esquema XML (XSD)
- 7. Clases XSD a Delphi sin enlace XML
- 8. Generación de instancias XML a partir del esquema XML (xsd)
- 9. Agregue un esquema XML a Visual Studio
- 10. esquema XML: elemento raíz
- 11. ¿Cómo puedo generar clases Java para la deserialización xml usando un esquema xml?
- 12. XML esquema ambiguo
- 13. validación de esquema XML
- 14. Esquema Xml: vacío targetNamespace
- 15. Spicing C con las clases
- 16. Validación completa del esquema XML
- 17. Recursividad en un esquema XML?
- 18. Esquema XML: sustitución de importaciones con el esquema correspondiente
- 19. La validación del esquema Xml falla con MemoryStream en C#
- 20. Esquema XML: grupos de sustitución
- 21. Agregar documentación/comentarios XML a las propiedades/campos en las clases generadas por EF
- 22. Visual Studio 2010: Esquema XML XSD para Clases dentro del IDE
- 23. Generando clases jaxb desde un esquema
- 24. ¿Cómo asignar los objetos JSON a las clases Objective C?
- 25. Cómo generar clases JAXB desde solo XML
- 26. Prestaciones de estructuras frente a las clases
- 27. Cómo agregar el esquema NHibernate XML a Visual Studio?
- 28. Validación de esquema XML: cvc-complex-type.2.4.a
- 29. Esquema DTD o XML. ¿Cuál es mejor?
- 30. ¿Genera clases c objetivas del esquema XSD como JaxB en Java?
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