Page 1 of 1

Error en archivo XML usando TXMLDocument SOLUCIONADO

PostPosted: Wed Sep 05, 2018 4:00 pm
by gmart1
Hola,
me encuentro con un problema en un fichero XML con el que me responde el webservice de SII de hacienda.
El siguiente código guarda un XML en la variable cCadena y al convertirla en XML con la clase TXMLDocument me da un mensaje con el oXML:nError = 4 en la línea 16.

Code: Select all  Expand view
#include "FiveWin.ch"
#include "hbxml.ch" 

    local oXML, cCadena

    cCadena := '<?xml version="1.0" encoding="UTF-8"?>' + CRLF + ;
           '<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">' + CRLF + ;
           '   <env:Header/>' + CRLF + ;
           '   <env:Body Id="Body">' + CRLF + ;
           '      <siiLRRC:RespuestaConsultaLRFactInformadasCliente ' + ;
               'xmlns:siiLRRC="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/RespuestaConsultaLR.xsd" ' + ;
               'xmlns:sii="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">' + CRLF + ;
           '         <sii:Cabecera>'  + CRLF + ;
           '            <sii:IDVersionSii>1.1</sii:IDVersionSii>'  + CRLF + ;
           '         </sii:Cabecera>'  + CRLF + ;
           '         <siiLRRC:IndicadorPaginacion>N</siiLRRC:IndicadorPaginacion>'  + CRLF + ;
           '         <siiLRRC:ResultadoConsulta>ConDatos</siiLRRC:ResultadoConsulta>'  + CRLF + ;
           '         <siiLRRC:RegistroRespuestaConsultaLRFactInformadasCliente>'  + CRLF + ;
           '            <siiLRRC:PeriodoLiquidacion>'  + CRLF + ;
           '               <siiLRRC:Ejercicio>2018</siiLRRC:Ejercicio>'  + CRLF + ;
           '               <siiLRRC:Periodo>08</siiLRRC:Periodo>'  + CRLF + ;
           '            </siiLRRC:PeriodoLiquidacion>'  + CRLF + ;
           '         <siiLRRC:FacturaSimplificadaArticulos7.2_7.3>N</siiLRRC:FacturaSimplificadaArticulos7.2_7.3>' + CRLF + ;
           '         </siiLRRC:RegistroRespuestaConsultaLRFactInformadasCliente>'  + CRLF + ;
           '      </siiLRRC:RespuestaConsultaLRFactInformadasCliente>'  + CRLF + ;
           '   </env:Body>'  + CRLF + ;
           '</env:Envelope>'

    oXML := TXmlDocument ():new (cCadena)
    if oXML:nError # 0
        ? 'Status', oXML:nStatus, 'Error', oXML:nError, 'Linea', oXML:nLine
    endif
    ? oXML:ToString ( HBXML_STYLE_INDENT + HBXML_STYLE_THREESPACES )


La etiqueta que da el error es <siiLRRC:FacturaSimplificadaArticulos7.2_7.3>, la he omitido en otra prueba y el oXML se construye sin error.

En el archivo hbxml.ch he consultado que el nError = 4 corresponde con HBXML_ERROR_INVNODE, que interpreto que es un nodo inválido, pero no sé el motivo.

He probado a abrir el XML con distintos editores y no me indican ningún error, así que recurro al foro para ver si me dan una ayuda sobre el por qué no se genera bien oXML.

Gracias.

Re: Error en archivo XML usando TXMLDocument

PostPosted: Wed Sep 05, 2018 4:16 pm
by karinha
Use este editor para editar el xml e mirar las tags:

http://fivewin.com.br/index.php?/topic/23814-xml-notepad-2007/#comment-269652

Saludos.

Re: Error en archivo XML usando TXMLDocument

PostPosted: Wed Sep 05, 2018 8:52 pm
by ACC69
gmart1 wrote:Hola,
me encuentro con un problema en un fichero XML con el que me responde el webservice de SII de hacienda.
El siguiente código guarda un XML en la variable cCadena y al convertirla en XML con la clase TXMLDocument me da un mensaje con el oXML:nError = 4 en la línea 16.

Code: Select all  Expand view
#include "FiveWin.ch"
#include "hbxml.ch" 

    local oXML, cCadena

    cCadena := '<?xml version="1.0" encoding="UTF-8"?>' + CRLF + ;
           '<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">' + CRLF + ;
           '   <env:Header/>' + CRLF + ;
           '   <env:Body Id="Body">' + CRLF + ;
           '      <siiLRRC:RespuestaConsultaLRFactInformadasCliente ' + ;
               'xmlns:siiLRRC="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/RespuestaConsultaLR.xsd" ' + ;
               'xmlns:sii="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">' + CRLF + ;
           '         <sii:Cabecera>'  + CRLF + ;
           '            <sii:IDVersionSii>1.1</sii:IDVersionSii>'  + CRLF + ;
           '         </sii:Cabecera>'  + CRLF + ;
           '         <siiLRRC:IndicadorPaginacion>N</siiLRRC:IndicadorPaginacion>'  + CRLF + ;
           '         <siiLRRC:ResultadoConsulta>ConDatos</siiLRRC:ResultadoConsulta>'  + CRLF + ;
           '         <siiLRRC:RegistroRespuestaConsultaLRFactInformadasCliente>'  + CRLF + ;
           '            <siiLRRC:PeriodoLiquidacion>'  + CRLF + ;
           '               <siiLRRC:Ejercicio>2018</siiLRRC:Ejercicio>'  + CRLF + ;
           '               <siiLRRC:Periodo>08</siiLRRC:Periodo>'  + CRLF + ;
           '            </siiLRRC:PeriodoLiquidacion>'  + CRLF + ;
           '         <siiLRRC:FacturaSimplificadaArticulos7.2_7.3>N</siiLRRC:FacturaSimplificadaArticulos7.2_7.3>' + CRLF + ;
           '         </siiLRRC:RegistroRespuestaConsultaLRFactInformadasCliente>'  + CRLF + ;
           '      </siiLRRC:RespuestaConsultaLRFactInformadasCliente>'  + CRLF + ;
           '   </env:Body>'  + CRLF + ;
           '</env:Envelope>'

    oXML := TXmlDocument ():new (cCadena)
    if oXML:nError # 0
        ? 'Status', oXML:nStatus, 'Error', oXML:nError, 'Linea', oXML:nLine
    endif
    ? oXML:ToString ( HBXML_STYLE_INDENT + HBXML_STYLE_THREESPACES )


La etiqueta que da el error es <siiLRRC:FacturaSimplificadaArticulos7.2_7.3>, la he omitido en otra prueba y el oXML se construye sin error.

En el archivo hbxml.ch he consultado que el nError = 4 corresponde con HBXML_ERROR_INVNODE, que interpreto que es un nodo inválido, pero no sé el motivo.

He probado a abrir el XML con distintos editores y no me indican ningún error, así que recurro al foro para ver si me dan una ayuda sobre el por qué no se genera bien oXML.

Gracias.


Hola buenas tardes Ing.
El ing. Carlos Navarro tiene su propio programa editor de xml y al mismo tiempo una buena herramienta para compilar tus programas en fivewin.

Adjunto el link y ponte contacto con el Ing. Carlos Navarro para que te apoye a configurarlo en tu pc.

viewtopic.php?f=6&t=24025&start=825

Saludos.

Atte: Adriano C. C.

Re: Error en archivo XML usando TXMLDocument

PostPosted: Wed Sep 05, 2018 9:16 pm
by hmpaquito
Hola,

¿ Puede ser que la clase TXmlDocument arroja error si encuentra un punto en un tag ?

Habría que probar a poner un punto a otra etiqueta anterior a la que marca error, a ver si el problema es ese.

Salu2

Re: Error en archivo XML usando TXMLDocument

PostPosted: Thu Sep 06, 2018 4:00 pm
by gmart1
Gracias karinha y Adriano, pero no necesito un editor de archivos XML.

Pero hmpaquito ha dado en el clavo,

hmpaquito wrote:Hola,

¿ Puede ser que la clase TXmlDocument arroja error si encuentra un punto en un tag ?

Habría que probar a poner un punto a otra etiqueta anterior a la que marca error, a ver si el problema es ese.

Salu2


Quitándole los puntos a la etiqueta <siiLRRC:FacturaSimplificadaArticulos7.2_7.3> y dejándola como : <siiLRRC:FacturaSimplificadaArticulos72_73> no da error.

Alguna idea de cómo se puede solucionar con TXMLDocument, o sabéis de alguna otra clase que maneje objetos XML ?

Re: Error en archivo XML usando TXMLDocument

PostPosted: Thu Sep 06, 2018 4:45 pm
by hmpaquito
Nunca he usado TXmlDocument, ¿ Qué quieres hacer con ella ?

Re: Error en archivo XML usando TXMLDocument

PostPosted: Thu Sep 06, 2018 5:04 pm
by gmart1
Quiero recorrer el XML que me devuelve hacienda para leer la información contenida en las etiquetas.
Con el objeto TXMLDocument me permite avanzar en los nodos con 'NextInTree', leer los nombres de etiquetas con el atributo 'cName' y valor de la etiqueta con 'cData'.

Ya he probado creando un objeto 'CreateObject("MSXML2.DOMDocument") y con LoadXML(cCadena) carga sin errores el archivo XML con punto en los nombre de etiqueta, ahora estoy buscando los métodos que puedo usar para recorrer los nodos.

Re: Error en archivo XML usando TXMLDocument

PostPosted: Thu Sep 06, 2018 5:08 pm
by hmpaquito
No uses TXmlDocument directamente.
Mira aquí: http://xthefull.blogspot.com/2017/04/co ... ate-v.html

Re: Error en archivo XML usando TXMLDocument

PostPosted: Mon Sep 10, 2018 10:28 am
by gmart1
He conseguido con MiniXML recorrer el archivo XML que tiene puntos en el Tag y que con TXMLDocument da error.
Expongo el código por si le sirve a otro compañero del foro.
Code: Select all  Expand view

#include "hbmxml.ch"
 local cCadena, hNext, cEtiquetas

 cCadena := '<?xml version="1.0" encoding="UTF-8"?>' + CRLF + ;
            '<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">' + CRLF + ;
            '   <env:Header/>' + CRLF + ;
            '   <env:Body Id="Body">' + CRLF + ;
            '      <siiLRRC:RespuestaConsultaLRFactInformadasCliente ' + ;
                'xmlns:siiLRRC="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/RespuestaConsultaLR.xsd" ' + ;
                'xmlns:sii="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">' + CRLF + ;
            '         <sii:Cabecera>'  + CRLF + ;
            '            <sii:IDVersionSii>1.1</sii:IDVersionSii>'  + CRLF + ;
            '         </sii:Cabecera>'  + CRLF + ;
            '         <siiLRRC:IndicadorPaginacion>N</siiLRRC:IndicadorPaginacion>'  + CRLF + ;
            '         <siiLRRC:ResultadoConsulta>ConDatos</siiLRRC:ResultadoConsulta>'  + CRLF + ;
            '         <siiLRRC:RegistroRespuestaConsultaLRFactInformadasCliente>'  + CRLF + ;
            '            <siiLRRC:PeriodoLiquidacion>'  + CRLF + ;
            '               <siiLRRC:Ejercicio>2018</siiLRRC:Ejercicio>'  + CRLF + ;
            '               <siiLRRC:Periodo>08</siiLRRC:Periodo>'  + CRLF + ;
            '            </siiLRRC:PeriodoLiquidacion>'  + CRLF + ;
            '         <siiLRRC:FacturaSimplificadaArticulos7.2_7.3>N</siiLRRC:FacturaSimplificadaArticulos7.2_7.3>' + CRLF + ;
            '         </siiLRRC:RegistroRespuestaConsultaLRFactInformadasCliente>'  + CRLF + ;
            '      </siiLRRC:RespuestaConsultaLRFactInformadasCliente>'  + CRLF + ;
            '   </env:Body>'  + CRLF + ;
            '</env:Envelope>'

     hNext := mxmlLoadString ( Nil, cCadena, MXML_OPAQUE_CALLBACK )
     cEtiquetas := ''
     do while hNext # Nil
         if mXMLGetType (hNext) = MXML_ELEMENT
             cEtiquetas += mXMLGetElement (hNext) + ' = '
         endif
         if mXMLGetType (hNext) = MXML_OPAQUE .and. ! EMPTY ( mXMLGetOpaque (hNext) )
             cEtiquetas += mXMLGetOpaque (hNext) + CRLF
         endif
         hNext := mXMLWalkNext(hNext, oXML, MXML_DESCEND)
     enddo
     ? cEtiquetas
     ? mxmlSaveAllocString (oXML, MXML_OPAQUE_CALLBACK)
     mxmlDelete ( oXML )
 


Gracias hmpaquito por tu ayuda, aunque no he usado la función de Thefull para convertir el XML en un Hash, si me ha orientado para usar MiniXML

Re: Error en archivo XML usando TXMLDocument SOLUCIONADO

PostPosted: Wed Sep 12, 2018 2:07 pm
by horacio
He intentado compilar tu ejemplo pero me da el siguiente error

Code: Select all  Expand view

Application
===========
   Error description: Error BASE/1003  Variable does not exist: OXML

Stack Calls
===========
   Called from: xmltohs.prg => MAIN( 40 )
 


Saludos

Re: Error en archivo XML usando TXMLDocument SOLUCIONADO

PostPosted: Wed Sep 12, 2018 3:34 pm
by gmart1
Aquí lo tienes actualizado y probado.

Code: Select all  Expand view

    #include "hbmxml.ch"
    local oXML, cCadena, hNext

    cCadena := '<?xml version="1.0" encoding="UTF-8"?>' + CRLF + ;
           '<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">' + CRLF + ;
           '   <env:Header/>' + CRLF + ;
           '   <env:Body Id="Body">' + CRLF + ;
           '      <siiLRRC:RespuestaConsultaLRFactInformadasCliente ' + ;
               'xmlns:siiLRRC="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/RespuestaConsultaLR.xsd" ' + ;
               'xmlns:sii="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">' + CRLF + ;
           '         <sii:Cabecera>'  + CRLF + ;
           '            <sii:IDVersionSii>1.1</sii:IDVersionSii>'  + CRLF + ;
           '         </sii:Cabecera>'  + CRLF + ;
           '         <siiLRRC:IndicadorPaginacion>N</siiLRRC:IndicadorPaginacion>'  + CRLF + ;
           '         <siiLRRC:ResultadoConsulta>ConDatos</siiLRRC:ResultadoConsulta>'  + CRLF + ;
           '         <siiLRRC:RegistroRespuestaConsultaLRFactInformadasCliente>'  + CRLF + ;
           '            <siiLRRC:PeriodoLiquidacion>'  + CRLF + ;
           '               <siiLRRC:Ejercicio>2018</siiLRRC:Ejercicio>'  + CRLF + ;
           '               <siiLRRC:Periodo>08</siiLRRC:Periodo>'  + CRLF + ;
           '            </siiLRRC:PeriodoLiquidacion>'  + CRLF + ;
           '         <siiLRRC:FacturaSimplificadaArticulos7.2_7.3>N</siiLRRC:FacturaSimplificadaArticulos7.2_7.3>' + CRLF + ;
           '         </siiLRRC:RegistroRespuestaConsultaLRFactInformadasCliente>'  + CRLF + ;
           '      </siiLRRC:RespuestaConsultaLRFactInformadasCliente>'  + CRLF + ;
           '   </env:Body>'  + CRLF + ;
           '</env:Envelope>'

    oXML := mxmlLoadString ( Nil, cCadena, MXML_OPAQUE_CALLBACK )

    cCadena := ''
    hNext := oXML
    do while hNext # Nil
        if mXMLGetType (hNext) = MXML_ELEMENT
            cCadena += mXMLGetElement (hNext) + ' = '
        endif
        if mXMLGetType (hNext) = MXML_OPAQUE .and. ! EMPTY ( mXMLGetOpaque (hNext) )
            cCadena += mXMLGetOpaque (hNext) + CRLF
        endif
        hNext := mXMLWalkNext(hNext, oXML, MXML_DESCEND)
    enddo
    ? cCadena
    ? mxmlSaveAllocString (oXML, MXML_OPAQUE_CALLBACK)
    mxmlDelete ( oXML )

 


Un saludo.