Error en archivo XML usando TXMLDocument SOLUCIONADO

Post Reply
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Error en archivo XML usando TXMLDocument SOLUCIONADO

Post 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

#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.
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Error en archivo XML usando TXMLDocument

Post by karinha »

Use este editor para editar el xml e mirar las tags:

http://fivewin.com.br/index.php?/topic/ ... ent-269652

Saludos.
João Santos - São Paulo - Brasil
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Error en archivo XML usando TXMLDocument

Post 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

#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.

http://forums.fivetechsupport.com/viewt ... &start=825

Saludos.

Atte: Adriano C. C.
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: Error en archivo XML usando TXMLDocument

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

Re: Error en archivo XML usando TXMLDocument

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

Re: Error en archivo XML usando TXMLDocument

Post by hmpaquito »

Nunca he usado TXmlDocument, ¿ Qué quieres hacer con ella ?
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Error en archivo XML usando TXMLDocument

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

Re: Error en archivo XML usando TXMLDocument

Post by hmpaquito »

No uses TXmlDocument directamente.
Mira aquí: http://xthefull.blogspot.com/2017/04/co ... ate-v.html
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Error en archivo XML usando TXMLDocument

Post 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

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

Re: Error en archivo XML usando TXMLDocument SOLUCIONADO

Post by horacio »

He intentado compilar tu ejemplo pero me da el siguiente error

Code: Select all

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

Stack Calls
===========
   Called from: xmltohs.prg => MAIN( 40 )
 
Saludos
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Error en archivo XML usando TXMLDocument SOLUCIONADO

Post by gmart1 »

Aquí lo tienes actualizado y probado.

Code: Select all

    #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.
Post Reply