Page 1 of 1

Alternativa a hbxml

PostPosted: Mon Apr 10, 2023 1:31 pm
by jose_murugosa
Estimados compañeros del Foro...
Estoy buscando una alternativa a hbxml para manejar archivos de ese tipo y parsearlos.
Me han dejado bien impresionado dos lib en C que llevan mucho tiempo de desarrollo y está aún en actividad con recientes actualizaciones y que además son gratis.
Estas lib son LibXml2 y TinyXml,
En chatGPT las recomiendan para utilizarse con harbour para el manejo de archivos XML
Quisiera saber si alguien las ha compilado en Borland C y tiene un wrapper para estas librería.
O si me podrá orientar para hacerlo o sugerirme alguna otra alternativa.
Desde ya gracias. :D

Re: Alternativa a hbxml

PostPosted: Mon Apr 10, 2023 6:22 pm
by Antonio Linares
Estimado Jose,

Que problema tienes con las funciones de uso de XML propias de Harbour ?

revisa los ejemplos FWH\samples\xmlreader.prg y xmltree.prg

veras que usan los ficheros XML correctamente :-)

Re: Alternativa a hbxml

PostPosted: Tue Apr 11, 2023 4:00 pm
by jose_murugosa
Antonio, he hecho varias pruebas y tal vez soy yo que no agarro la soga, pero no logro entenderlo y al funcionar no obtengo el resultado deseado.
Te mando exe, código y ejecutable simplificados en este zip

https://mega.nz/file/rJoBmazC#ptetxZVAo ... ncalZt-jag

Re: Alternativa a hbxml

PostPosted: Tue Apr 11, 2023 4:25 pm
by wilsongamboa
buenos dias porque no asi

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

FUNCTION Testxml()

    local aCods, aNoms, i, cTexto := hb_memoread( 'producto.xml') , aProd

     aCods = sacavalvariostag( "<ProductCode>", "</ProductCode>", cTexto  )
     aNoms = sacavalvariostag( "<ProductDesc>", "</ProductDesc>", cTexto  )

     aProd = {}



     for i = 2 to len( aCods )
         aadd( aProd, { 'ProductCode' => aCods[i], ;
                        'ProductDesc' => aNoms[i] } )
     next

    xbrowser aProd

RETURN

function sacavaltag( cTag, cUnTag, cTexto )

    local cVal
    local nAt1 //:= at( cTag   , cTexto )
    local nAt2 //:= at( cUnTag , cTexto )

    //cTexto = fe_pharsehtml( cTexto )
    nAt1 := at( cTag   , cTexto )
    nAt2 := at( cUnTag , cTexto )

    /*
    if '&lt;' $ ctexto
        cTag   = '&lt;'  + substr( cTag, 2   )
        cUnTag = '&lt;/' + substr( cUnTag, 3 )
        nAt1   = at( cTag   , cTexto )
        nAt2   = at( cUnTag , cTexto )
    end
    */


    //veaXml( cTexto, 'como se ve xml' )

    cVal = substr( cTexto, nAt1 + len( cTag ) , nAt2 - nAt1 - len( cTag ) )

return cVal


function sacavalvariostag( cTag, cUnTag, cTexto )


    local cTg       := cTag
    local cuTg      := cUnTag
    local aTokens
    local aLineas   := {}
    local i

    aTokens = hb_atokens( cTexto, cuTg )
    for i = 1 to len( aTokens )
        if at( cTg, aTokens[i] ) > 0
            aTokens[i] = substr( aTokens[i], at( cTg, aTokens[i] ) + len( cTg ) )
            aadd( aLineas, aTokens[i] )
        end
    next

return aLineas
 

Re: Alternativa a hbxml

PostPosted: Tue Apr 11, 2023 6:03 pm
by jose_murugosa
Gracias Wilson, de este modo funciona perfecto.

Pero me gustaría saber porque dicen que hbxml funciona y yo utilizando sus métodos no puedo obtener un resultado favorable, no dudo que sea por mi torpeza.

de hecho compilo el ejemplo xmlreader y no me funciona tampoco.

Pero con esto, soluciono mi problema puntual.

Gracias!!!!!!!

Re: Alternativa a hbxml

PostPosted: Tue Apr 11, 2023 6:33 pm
by wilsongamboa
yo perdi mucho tiempo tratando de lo mismo al parecer mucho depende de la complejidad del xml pero para facturación electrónica y todo lo que he hecho con esas dos funciones es mas que suficiente
saludos

Re: Alternativa a hbxml

PostPosted: Wed Apr 12, 2023 11:47 am
by jose_murugosa
Gracias :D , a mi me ha solucionado el problema!!!