Error en archivo XML usando TXMLDocument SOLUCIONADO

Error en archivo XML usando TXMLDocument SOLUCIONADO

Postby gmart1 » Wed Sep 05, 2018 4:00 pm

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.
Last edited by gmart1 on Mon Sep 10, 2018 10:29 am, edited 1 time in total.
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Error en archivo XML usando TXMLDocument

Postby karinha » Wed Sep 05, 2018 4:16 pm

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.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Error en archivo XML usando TXMLDocument

Postby ACC69 » Wed Sep 05, 2018 8:52 pm

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.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

Re: Error en archivo XML usando TXMLDocument

Postby hmpaquito » Wed Sep 05, 2018 9:16 pm

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
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Error en archivo XML usando TXMLDocument

Postby gmart1 » Thu Sep 06, 2018 4:00 pm

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 ?
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Error en archivo XML usando TXMLDocument

Postby hmpaquito » Thu Sep 06, 2018 4:45 pm

Nunca he usado TXmlDocument, ¿ Qué quieres hacer con ella ?
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Error en archivo XML usando TXMLDocument

Postby gmart1 » Thu Sep 06, 2018 5:04 pm

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.
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Error en archivo XML usando TXMLDocument

Postby hmpaquito » Thu Sep 06, 2018 5:08 pm

No uses TXmlDocument directamente.
Mira aquí: http://xthefull.blogspot.com/2017/04/co ... ate-v.html
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Error en archivo XML usando TXMLDocument

Postby gmart1 » Mon Sep 10, 2018 10:28 am

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
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Error en archivo XML usando TXMLDocument SOLUCIONADO

Postby horacio » Wed Sep 12, 2018 2:07 pm

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
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Error en archivo XML usando TXMLDocument SOLUCIONADO

Postby gmart1 » Wed Sep 12, 2018 3:34 pm

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.
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 88 guests