Hi,
I have this question:
We are calling to a web service than returns a response with this format:
|
We save the reponse on a file and then we try to load it into a PBDOM using PBDOM_BUILDER.BuildFromFile(FILE), but for large files, the costs is elevated. (I think it could be because of the html format < ... >):
lpbdom_Builder = CREATE PBDOM_BUILDER |
So, we found another solution:
/************************************************************************************* * Funcion : of_build_pbdom_respuesta * * Descripción : Contruye el árbol DOM con la respuesta del servicio HYYP a partir * del XML contenido en el fichero indicado. * * Creamos esta función para la carga puesto que la nativa de PB * BuildFromFile, tardaba mucho tiempo en cargar el fichero, entiendo * debido a que el XML de respuesta estaba en formato HTML con * < en vez de < y > en vez de > * * * Argumentos : - as_ruta_fichero_xml: La ruta completa del fichero XML a carga * - apbdom_doc (REF): El árbol DOM construido a partir del XML * - as_xml_msj_error: Texto del error, si se produce. * * Devuelve : 1 OK, -1 ERROR * * Evento : AG6794 * ************************************************************************************** * Fecha Autor Comentarios * -------------- ---------- -------------------------------------------------- * 13/02/2023 JIR Versión Inicial *************************************************************************************/ string ls_xml long ll_ret OleObject lole_dom PBDOM_BUILDER lpbdom_Builder PBDOM_DOCUMENT lpbdom_Doc TRY // Cargamos el Fichero, sin utilizar la función nativa BuildFromFile porque tardaba mucho tiempo en crear el arbol. lole_dom = Create oleobject lole_dom.ConnectToNewObject ("Msxml2.DOMDocument") lole_dom.Load(as_ruta_fichero_xml) /* Obtenemos del Documento el XML de la Respuesta childNodes.Item(1). childNodes.Item(0). childNodes.Item(0). childNodes.Item(0). ... Texto XML RESPUESTA childNodes.Item(0).nodevalue ... */ ls_xml = string(lole_dom.childNodes.Item(1).childNodes.Item(0).childNodes.Item(0).childNodes.Item(0).childNodes.Item(0).nodevalue) CATCH (OLERuntimeError oleError) as_xml_msj_error = "RUNTIME_ERROR : No se pudo cargar la respuesta del fichero XML" + CR + string(oleError.Description) RETURN -1 END TRY lpbdom_Builder = CREATE PBDOM_BUILDER TRY // Generamos el Documento a partir únicamente del XML de la Respuesta lpbdom_Doc = lpbdom_Builder.BuildFromString(ls_xml) CATCH (PBDOM_Exception lpbdom_Except) as_xml_msj_error = "PBDOM_Exception : " + string(lpbdom_Except.GetExceptionCode()) RETURN -1 END TRY apbdom_doc = lpbdom_Doc DESTROY(lpbdom_Builder) return 1 |
The question is: Were we doing something wrong with BuildFromFile? or it is a problem of this function?
24 seconds vs 0 seconds on load example attached file.
Regards,
Julian