Pregunta

Actualmente estoy desarrollando un servicio para generar archivos XML que sigue al estándar UBL para una factura, y por lo tanto necesito usar algunos esquemas XSD.

Estoy desarrollando en .NET C #, y encontré una forma en que puede asignar las clases XSD a C #, utilizando el XSD.EXE, que parece bien?

El problema que estoy enfrentando es que hay otros espacios de nombres en el archivo XSD, lo que parece hacer algunos problemas para mis clases generadas (XSD: Imports):

<!-- ===== xsd:schema Element With Namespaces Declarations ===== -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2"
xmlns:ccts="urn:un:unece:uncefact:documentation:2"
xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
version="2.0">
<!-- ===== Imports ===== -->
<xsd:import namespace="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" schemaLocation="../common/UBL-CommonAggregateComponents-2.0.xsd"/>
<xsd:import namespace="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" schemaLocation="../common/UBL-CommonBasicComponents-2.0.xsd"/>
<xsd:import namespace="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" schemaLocation="../common/UnqualifiedDataTypeSchemaModule-2.0.xsd"/>
<xsd:import namespace="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" schemaLocation="../common/UBL-CommonExtensionComponents-2.0.xsd"/>
<xsd:import namespace="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" schemaLocation="../common/UBL-QualifiedDatatypes-2.0.xsd"/>
<!-- ===== Root Element ===== -->
<xsd:element name="Invoice" type="InvoiceType">
...

I corrió el XSD.EXE con el siguiente comando:

xsd.exe /c C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\maindoc\UBL-Invoice-2.0.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\UBL-CommonAggregateComponents-2.0.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\UBL-CommonBasicComponents-2.0.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\UnqualifiedDataTypeSchemaModule-2.0.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\UBL-CommonExtensionComponents-2.0.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\UBL-QualifiedDatatypes-2.0.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\CodeList_UnitCode_UNECE_7_04.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\CodeList_MIMEMediaTypeCode_IANA_7_04.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\CodeList_LanguageCode_ISO_7_04.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\CodeList_CurrencyCode_ISO_7_04.xsd

Cuando intento hacer el archivo XML con el uso del código generado, la salida se ve así, donde falta las importaciones y los mensajes de nombres, y termina fallando la validación.

<?xml version="1.0" encoding="utf-8"?>
<Invoice xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
   <UBLVersionID xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">2.0</UBLVersionID>
   <LegalMonetaryTotal xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
   <LineExtensionAmount currencyID="DKK" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">200</LineExtensionAmount>
   <PayableAmount currencyID="DKK" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">300</PayableAmount>
   </LegalMonetaryTotal>
</Invoice>

y aquí SOM SAMPLECODE DONDE GENERÍO EL XML de las clases generadas a través de un XMlSerializer

XmlSerializer mySerializer = new XmlSerializer(typeof(InvoiceType));
    InvoiceType invoice = new InvoiceType();

    UBLVersionIDType UVer = new UBLVersionIDType();
    UVer.Value = "2.0";
    invoice.UBLVersionID = UVer;

    MonetaryTotalType mtt = new MonetaryTotalType();
    LineExtensionAmountType lep = new LineExtensionAmountType();
    lep.currencyID = CurrencyCodeContentType.DKK;
    lep.Value = 200;
    PayableAmountType pat = new PayableAmountType();
    pat.currencyID = CurrencyCodeContentType.DKK;
    pat.Value = 300;

    mtt.LineExtensionAmount = lep;
    mtt.PayableAmount = pat;

    invoice.LegalMonetaryTotal = mtt;
    StreamWriter sw = new StreamWriter(@"C:\New folder\test2.xml");

    mySerializer.Serialize(sw, invoice);
    sw.Close();

¿Cómo puedo arreglar esto, y es el derecho (mejor / más fácil (forma de hacer XMLS que siguen los esquemas XSD en Inet?

¿Fue útil?

Solución

se enteró a mí mismo.

Necesitaba el objeto XMLSerializernamamesPaces, que contiene los espacios de nombres y los prefijos para el documento XML.

(http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializernamesPaces.aspx)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top