Page 1 of 1
Alternativa a hbxml
Posted: 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.
Re: Alternativa a hbxml
Posted: 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
Posted: 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
Posted: Tue Apr 11, 2023 4:25 pm
by wilsongamboa
buenos dias porque no asi
Code: Select all | Expand
#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 '<' $ ctexto
cTag = '<' + substr( cTag, 2 )
cUnTag = '</' + 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
Posted: 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
Posted: 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
Posted: Wed Apr 12, 2023 11:47 am
by jose_murugosa
Gracias
, a mi me ha solucionado el problema!!!