Parsear XML


([N1] tcvsi) #1

Necesito acceder a los contenidos de un archivo xml.
Se que hay una openapps que hace algo de eso, pero lo hace tratando el xml omo un texto y por tanto es muy lento y no lee bien todas las etiquetas.
Mi idea era utilizar un javascript que lo hiciera y he encontrado alguno. Se trata de un archivo .js que contiene todas las funciones.

Mi pregunta es, ¿alguien sabe si se puede hacer el equivalente a <script language="JavaScript" src ="archivo.js"> </script> desde el intérprete de scripts?

Porque no creo que mover a una variable local (como en los ejemplos) todo el codigo del .js (que incluye un monton de funciones y es bastante largo con unas 1500 lineas) sea factible.

Mi segunda pregunta es ¿alguien conoce otro sistema de incorporar un XML parser externo?


([N4] ikonos) #2

En la OpenApp vTools tienes algunas funciones para parsear XML, echales un vistazo quizas te sirvan.
Un Saludo


([N4] eic) #3

Hola.

Salió ya en un hilo hace unos días la imposibilidad de referenciar archivos externos desde un script. Hay que meter todo el código dentro.

El problema de un parseador externo es cómo introducir cada uno de los valores en la BD de Velneo. No hay sólo que llamar al parseador, sino recibir la información que va tratando... y eso no es tan sencillo.

Quizá puedas mirar, en la OpenApp, por qué no lee bien las etiquetas y tratar de arreglarlo.

Saludos,

Fran Varona


([N1] tcvsi) #4

Gracias por las respuestas.

Efectivamente, la vTools fue lo primero que miré, aunque tendré que mirar porqué no busca bien todas las etiquetas.

No perderé más tiempo por el momento, e intentaré utilizar la openapp.

No obstante hay una idea para votar que pide implementar nativamente funciones de parseo de XML
Y aprovechando comentar que el otro día propuse una nueva idea relativa a poder incorporar desde twain a campos objeto, tal y como se hacía en v6 (por lo menos).


([N4] ikonos) #5

Si lo que quieres es referenciar una libreria.js externa desde el interprete de EMACScript de Velneo, para manejar a tu gusto las clases y variables de esa libreria lo tienes complicado, por que imagino que lo que quieres es manejar el resultado de las variables en tiempo de ejecución desde Velneo y eso es la respuesta del Servidor.
Extrictamente cuando haces eso lo que haces es acceder a las clases que corren en el servidor (donde esta la libreria externa, da igual que este en localhost, que en URL, a nivel de programación estan en el servidor). Y fijate que eso lo queremos hacer desde el Cliente, con el interprete de JScript "que es un lenguaje de Cliente" y por seguridad no se permite el acceso a los resultados de las clases alojadas en "servidor" desde un "cliente" eso seria darle las llaves de tu casa a todo el mundo.
Para obtener resultados de objetos de Servidor (que imagino es lo que quieres) precisamente se utiliza XML y mejor aun JSOM, por lo tanto yo centraria tu problema en ver si las respuestas XML, solo las puedes tener en XML o también puedes obtener respuestas JSOM.
Si solo tienes XML tienes que crear un buen parseador XML no hay otra.
Pero si la respuesta del servidor es JSOM tienes una gran ventaja, el archivo JSOM es formalmente igual a la respuesta XML, pero con grandes ventajas, es mucho más rapido de procesar y ya es un prototipo de JScript donde tienes almacenadas las respuestas del servidor en un vector de la estructura y puedes manejarlas con JScript directamente.
Es decir, te olvidas de llamar a la libreria externa, solicitas la respuesta al servidor externo en JSOM, y despues lees el archivo JSOM, bien en el Navegador o en disco lo que quieras y finalmente puedes porcesar los datos obtenidos con JScript como si fuera un vector de estructuras, "accediendo directamente al registro que quieras" estructura[i].Campodeseado.Valor.


([N4] ikonos) #6

Bueno definitivamente tengo dislexia, JSOM >>>>> JavaScript Objet Notation (JSON) !Eso esta mejor!


([N4] ikonos) #7

Por ejemplo esto seria un respuesta JSON del API de Google Places, y un ejemplo de procesamiento de la respuesta en JScript.

[attachment=16445,1355] [attachment=16445,1356]


([N1] tcvsi) #8

Impresionante. Te agradezco muchísimo este derroche de explicaciones.

Desgraciadamente no dispongo de una respuesta JSON.

Lo que realmente hago es una solicitud a un portal de reservas de hotel con unos parámetros y me devuelve un archivo xml.

Tengo que procesar este archivo para transformar la información de las reservas hechas en el portal e integrarlas en las reservas de mi aplicación. Esta información es XML puro y duro.

Así que tiraré de la vTools e intentaré solucionar el problema de reconocimiento de algunos nodos.


([N2] bannu) #9

Si le interesa a alguien dispongo de una DLL a la venta para parsear y crear XML, parte de la documentación la podeis descargar de aqui:

http://www.bitcodesoft.com/demos/xmlparser.pdf

Es muy simple de utilizar, un ejemplo:


dll:XMLPARSER.PARSER_LOAD@xmldemo.app( "C:/fichas.xml" )
dll:XMLPARSER.PARSER_FINDELEM@xmldemo.app()
dll:XMLPARSER.PARSER_INTOELEM@xmldemo.app()
FOR( RESULT=1, RESULT=1,)
SET( RESULT,dll:XMLPARSER.PARSER_FINDELEM@xmldemo.app("FICHA"))
IF( RESULT )
dll:XMLPARSER.PARSER_INTOELEM@xmldemo.app()
SET( RESULT,dll:XMLPARSER.PARSER_FINDELEM@xmldemo.app("NOMBRE"))
SET( NOMBRE,dll:XMLPARSER.PARSER_GETDATA@xmldemo.app())
SET( RESULT,dll:XMLPARSER.PARSER_FINDELEM@xmldemo.app("APELLIDO"))
SET( APELLIDO,dll:XMLPARSER.PARSER_GETDATA@xmldemo.app())
SET( RESULT,dll:XMLPARSER.PARSER_OUTOFELEM@xmldemo.app())

Interesados: info@bitcodesoft.com


([N4] ikonos) #10

@sonovision,

Muy buena pinta tiene esa DLL, con una gama de funciones bastante completa y todo lo necesario para parsear, ¿la dll es para windows, o la tienes para otros sistemas operativos? y la pregunta del millon ¿cuanto vale?

P.D. aqui te dejo mi e-mail para la 2ª pregunta por si no es aconsejable su publicación: miguel.ikonos@gmail.com

Un saludo, fiera!


([N1] Pepeto) #11

Ahora no tengo demasiado tiempo para realizar pruebas, pero si alguien puede hacerlas y comunicar el resultado, estare agradecido.

Aqui os dejo algo de info que puede ser interesante:
http://www.ibm.com/developerworks/library/x-ffox3/?ca=dgr-btw01XMLinFirefox3

un saludo
Jose Luis
http://www.ascsl.com


([N2] bannu) #12

Existen dos versiones la lite a la que pertenece la documentación y la Prof, esta última dispone de más funciones, por ejemplo: se pueden guardar y leer datos binarios en base64.

En cuanto a la portabilidad se puede portar, ya que no utiliza librerías específicas de Windows, es C++ estándar, pero la verdad no estoy muy puesto en Linux ni en Mac os, a todo no se le puede dar.