Saludos a todos…
Hola oscarac, intentaré explicar nuestra experiencia sobre el tema por si te puede orientar…
Cuando en nuestro ERP desarrollamos la generación de facturas en formato xml, optamos por la generación “a pelo”, en formato texto, tal y como comenta el compañero dec.
Y así lo tenemos en la actualidad.
De todas formas, más tarde, investigamos sobre de qué forma los ficheros xsd que definen la estructura del xml podían utilizarse para simplificar el proceso y descubrimos el XML Data Binding.
Utilizando esta herramienta conseguimos generar una interface que permite generar y guardar de una forma más encapsulada la factura en formato xml.
En nuestro caso, la unidad que contiene la interface creada por el XML Data Binding a partir del xsd , contiene más de 6 mil líneas y esta es una muestra del código generado
Código Delphi
[-]
unit Facturaev3_2;
interface
uses xmldom, XMLDoc, XMLIntf;
type
IXMLFacturae = interface;
IXMLFileHeaderType = interface;
IXMLThirdPartyType = interface;
IXMLTaxIdentificationType = interface;
IXMLLegalEntityType = interface;
.
.
.
.
.
IXMLFacturae = interface(IXMLNode)
['{4180325F-7A60-46DE-9C54-055114275527}']
function Get_FileHeader: IXMLFileHeaderType;
function Get_Parties: IXMLPartiesType;
function Get_Invoices: IXMLInvoicesType;
function Get_Extensions: IXMLExtensionsType;
function Get_Signature: IXMLSignatureType_ds;
property FileHeader: IXMLFileHeaderType read Get_FileHeader;
property Parties: IXMLPartiesType read Get_Parties;
property Invoices: IXMLInvoicesType read Get_Invoices;
property Extensions: IXMLExtensionsType read Get_Extensions;
property Signature: IXMLSignatureType_ds read Get_Signature;
end;
.
.
.
function GetFacturae(Doc: IXMLDocument): IXMLFacturae;
function LoadFacturae(const FileName: string): IXMLFacturae;
function NewFacturae: IXMLFacturae;
.
.
.
Y un ejemplo de su llamada e inicio de construcción del xml
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
Factura: IXMLFacturae;
begin
Factura:= GetFacturae(xml);
Factura.FileHeader.SchemaVersion:='3.2';
Factura.FileHeader.Modality:='I';
Factura.FileHeader.InvoiceIssuerType:='EM';
.
.
.
end;
Saludos