Generar clase C# desde XSD (UBL 2.1)

Con este tema de facturación electrónica, XML y UBLs 2.0/ 2.1, se han establecido que las facturas, boletas y demás documentos comerciales se envíen a un web service con formato XML por ello se definieron diferentes archivos XSD que validan los XML estos lo puede ubicar aquí

https://docs.oasis-open.org/ubl/cs1-UBL-2.1/xsd/  <-- para UBL 2.1
https://docs.oasis-open.org/ubl/cs-UBL-2.0/xsd/  <---para UBL 2.0

También partir de estos XSD se pueden generar clases de C# que facilmente se pueden serialzar a XML, aqui te voy a mostrar como hacerlo.

Para hacerlo necesitamos los XSD descargados para este ejemplo voy a usar la version UBL 2.1.
En una carpeta ponemos todos los archivos descargados, como se muestra a continuación

Luego necesitamos el programa XSD.exe que viene con visual studio, este se encuentra en C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin este archivo lo copiamos a la carpeta donde estan nuestros XSDs descargados.
Algunas rutas alternativas donde puede estar son: C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools  o C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools esto depende de la versión de visual studio que tengan.

Luego abrimos el CMD y nos ubicamos en la carpeta y copiamos el siguiente comando, y presionamos enter:

xsd UBL-Invoice-2.1.xsd UBL-CommonExtensionComponents-2.1.xsd UBL-UnqualifiedDataTypes-2.1.xsd UBL-CommonBasicComponents-2.1.xsd UBL-CommonAggregateComponents-2.1.xsd UBL-QualifiedDatatypes-2.1.xsd CCTS_CCT_SchemaModule-2.1.xsd /c /l:cs

En nuestra carpeta se genera un archivo con extensión CS que es la clase generado a partir del XSD.
El programa XSD recibe 4 parametros:
1) UBL-Invoice-2.1.xsd es el nombre de archivo del cual se va generar la Clase C#, 
2) Los nombres de archivos que siguen desde UBL-CommonExtensionComponents-2.1.xsd ... hasta antes de /c son los nombres de archivos que contiene los tipos que se utilizan en el xsd principal
3) /c indica que se va a generar una clase
4) /l:cs indica que el lenguaje de la clase va a ser C# (csharp)

El archivo generado lo renombramos, en este ejemplo sera Factura_v2_1.cs y vemos el codigo generado.
Si ha buscando ejemplo en internet y no les funcionaba era porque faltaba pasar el nombre de los archivos que contienen los tipos que utiliza el xsd principal.

Espero que les haya funcionado no olviden en preguntar.

Actualizacion por pedido a varias personas se ha creado el post CREAR ARCHIVO XML A PARTIR DE CLASE (UBL 2.1)

Comentarios

  1. Buenas tardes, ahora la pregunta es ¿Cómo puedo utilizar la clase creada para generar los xml? si tienes conocimientos sobre eso podrías compartirlo, por favor. Gracias de antemano

    ResponderBorrar
  2. Muchas gracias amigo por tu aporte, hasta ahora he podido crear la clase, que antes no podía, ahora a trabajar en lo que falta. Saludos

    ResponderBorrar
  3. Muy buen aporte estimado, simple y práctico.
    Me uno a los demás, pedidos...si podrías apoyarnos a consumir esa clase ahora, es decir la generación del XML usando dicha clase. Desde ya muy agradecido

    ResponderBorrar
  4. Muchas gracias por tu aporte. No puedo utilizar las clases con Signature, Note, StarDate, EndDate, DespatchDocumentReference. Con los propios de Invoice si lo puedo manejar pero con los anteriores no. Agradezco tu ayuda, sobre como trabajar con estos nodos.

    ResponderBorrar
  5. Hola Jose,
    Muy interesante tu blog, tienes un email donde te pueda escribir, tengo una duda con la creación de la clase a partir de l XSD.
    Si me pudieras ayudar te lo agradecería.

    Mi correo es: faustousme@hotmail.com

    Mil gracias.

    ResponderBorrar

Publicar un comentario

Entradas populares