Para ahorrarle a alguno posibles p茅rdidas de tiempo o por si a alguien se le ocurre una soluci贸n porque yo tenga alg煤n error publico el problema con la que me he encontrado.
Al utilizar la librer铆a mxml de harbour para generar ficheros xml con la finalidad de poder intercambiar mensajes xml con la AEAT (Agencia Tributaria espa帽ola) mediante el Web Service he tenido que dedicar bastante tiempo debido a que la AEAT da como erroneos los xml generados con esta librer铆a de Harbour porque introduce unos caracteres CRLF que a la AEAT no le gustan.
El c贸digo utilizado es:
Y el error devuelto por la AEAT es:
Aunque sin embargo, en los navegadores, el xml generado con la librer铆a rese帽ada se ven bien y lo dan por correctos.
Al utilizar la librer铆a mxml de harbour para generar ficheros xml con la finalidad de poder intercambiar mensajes xml con la AEAT (Agencia Tributaria espa帽ola) mediante el Web Service he tenido que dedicar bastante tiempo debido a que la AEAT da como erroneos los xml generados con esta librer铆a de Harbour porque introduce unos caracteres CRLF que a la AEAT no le gustan.
El c贸digo utilizado es:
function xml_test_gen()
local cFichSalida:="TEST_XML.xml"
local xml, root, header, body, Declarante
local oXml // Para comprobar al final que el xml generado se puede parsear.
xml := mxmlNewXML() // Sin argumentos asume que es la "1.0"
root := mxmlNewElement( xml, "soapenv:Envelope" )
// Atributos de "soapenv:Envelope"
mxmlElementSetAttr( root, "xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope/" )
mxmlElementSetAttr( root, "xmlns:ie2", "https://www3.agenciatributaria.gob.es/static_files/common/internet/dep/aduanas/es/aeat/adia/avit/ws/IeXXXV1Ent.xsd" )
mxmlElementSetAttr( root, "xmlns:cab", "https://www3.agenciatributaria.gob.es/static_files/common/internet/dep/aduanas/es/aeat/adia/avit/ws/cab.xsd" )
header := mxmlNewElement(root, "soapenv:Header")
body := mxmlNewElement(root, "soapenv:Body")
//Declarante
Declarante := mxmlNewElement(body, "ie2:IeXXX")
mxmlElementSetAttr( Declarante, "Id" , dtos(date())+strzero(12345,9) )
mxmlElementSetAttr( Declarante, "NifDeclarante" , "99999999R" )
mxmlElementSetAttr( Declarante, "NombreDeclarante", "JUAN MANOLO MANOLO" )
mxmlSaveFile( xml, cFichSalida, MXML_OPAQUE_CALLBACK )
/*MXML_OPAQUE_CALLBACK constant which specifies that all data nodes in the
document contain opaque string values with whitespace preserved. */
// Parsea el fichero xml para comprobar que cumple con el formato xml.
oXML := mxmlLoadString ( NIL, hb_MemoRead( cFichSalida ), MXML_OPAQUE_CALLBACK )
if empty( oXML )
msgstop("No gener贸 el fichero XML correctamente: "+cFichSalida,"ERROR FICHERO XML")
else
msginfo("Gener贸 fichero: "+cFichSalida,"Proceso terminado")
endif
mxmlDelete( xml )
mxmlDelete( root )
mxmlDelete( header )
mxmlDelete( body )
mxmlDelete( Declarante )
mxmlDelete( oXML )
return nilY el error devuelto por la AEAT es:
<faultstring>Codigo[1304].El tipo de elemento "soapenv:Envelopexmlns" debe ir seguido por una de estas especificaciones de atributo: ">" o "/>". (1,61)</faultstring>Aunque sin embargo, en los navegadores, el xml generado con la librer铆a rese帽ada se ven bien y lo dan por correctos.