jueves, 8 de octubre de 2009

OBTENCIÒN DE DATOS DE XML CON XPATH Y JAVA

El otro dìa me encontre con un post que hablaba muy bien de un lenguaje de programaciòn para el ràpido acceso a datos embebidos en un fichero XML, este lenguaje se llama XPATH
y es una versiòn superior a otro conocido pero màs antiguo lenguaje llamado XQL, el cual su logica era en base a consultas tipo SQL acceder a los datos pero no de una BD sino de XML propiamente. XPATH heredò toda la sintaxis de este lenguaje como predecesor que es y le ha puesto varias mejoras. XPATH como lenguaje esta orientado a buscar información dentro de
documentos con esctructura en XML. Uno de sus ùnicos defectos que le he podido encontrar es que no se pueden realizar JOINs, pero se puede jugar con los datos obtenidos y cargar listas de datos por ejemplo de còdigos que pueden servir en entrada para la obtenciòn de datos de otra tabla (si lo orientamos a SQL por decir) y que finalmente da un resultado similar al de un JOIN. Este lenguaje es verdaderamente ràpido y lo mejor es que podemos trabajarlo simultaneamente con JAVA, ya que JAVA posee librerìas que soportan las consultas generadas con los XPATH Querys y por ser un lenguaje superior JAVA te permite lo anteiormente hablado de simular un JOIN cargando
listas y recorriendolas.

Al comienzo XPATH puede causar un poco de molestia, ya que su sintaxis no es SQL, pero poco a poco uno le agarra el truco, yo en medio dìa lo aprendì y para probarme que tan bien lo aprendì, busquè y encontre una muy buena WEB donde explican todo en Español sobre XPATH y posse un SIMULADOR donde te toman un TEST de sintaxis
que en base a preguntas y con un gran XML a tu costado, tienes que demostrar que sabes y codificar tu Query y comparar el resultado que tienes con el resultado correcto, que tambien se muestra al lado.

Los links son los siguientes:

- TUTORIAL: http://geneura.ugr.es/~victor/cursillos/xml/XPath
- FICHERO XML: http://geneura.ugr.es/~victor/cursillos/xml/XPath/ejercicios_xpath_xml.html
- SIMULADOR: http://geneura.ugr.es/~victor/cursillos/xml/XPath/ejercicios_xpath.html

Pero como este es un BLOG de JAVA, tenemos que hablar de JAVA, asi voy a mostrar la soluciòn de este simulador pero dentro de una aplicaciòn JAVA que yo mismo cree y que de paso muestra el facil manejo de lentura de XML que este XPATH con JAVA de manera conjunta hacen.

Para descargar la aplicaciòn demo pulsar:
AQUI.

6 comentarios:

El-Aragon dijo...

Hola,

Estoy empezando a usar XPATH y la verdad es que es una gozada :D

Sin embargo todos las referencias que encuentro son parar ejecutar una consulta sobre un Documento y necesito poder realizarla sobre un String (en Java).

¿Alguna idea?

Gracias

JAVAMAN dijo...

mmnnm XPATH normalmente lo he utilizado para recorrer ficheroros XML en una ruta especifica. Solo lo
he utilizado como lo necesitas utilizando una API que maneje en el IBM MESSAGE BROKER 6.1 en un control JAVACOMPUTE que permitia su lectura desde una cadena. Pero, si necesita hacer esto podrias construir una funcion que si recives en un cadena un XML antes de su lectura mandar a grabar la cadena en un fichero: c://miFichero.xml por ejemplo y con dicho XML ya cargado ya podrias utilizar el XPATH como muestro en el demo. Finalmente si deseas podrias implementar otra funcion en JAVA que te limpie el Fichero o lo elimine según te convenga.

Suerte

El-Aragon dijo...

Probaré lo que me dices, porque la opción de escribir la cadena en un fichero me resulta ineficiente.
El sistema que estoy diseñando es muy intensivo en recursos, y teniendo ya el XML en una cadena, resultaba fundamental parsearla directamente.

Gracias, las webs y blogs de difusión de Java como el tuyo me están resultando de gran ayuda

JAVAMAN dijo...

Asi es compañero, cuando las mismas funciones publicas de las clases Java u Objetos no te brindan la facilidad de alguna funcionalidad uno tiene que ver la forma de como solucionarla asi sea ineficiente de alguna forma. La ventaja que te da XPATH es que para XML gigantes obtener sus datos es infinitamente mas rapido que utilizando otras clases JAVA para recorridos de XML ya que estas gastan mucho tiempo recorriendo y recorriendo XMLs. Con XPATH ganas mucho rapides en las consultas de data. Pero si deseas manejar XMLs te recomiento esta API:

http://frameworksjava2008.blogspot.com/2009/10/manejo-de-fechas-con-joda-api.html

Que pasea todos los XMLs a nivel de objetos ...

Saludos.

El-Aragon dijo...

Di con la solución :D

http://stackoverflow.com/questions/1522874/best-way-to-parse-an-xml-string-in-java

Gracias por las ideas

JAVAMAN dijo...

Esa solución posteada es con SAX si si he trabajado con ella, solo que creia que la solucion que deseabas era con XPATH. Por ese motivo te estaba explicando la posible solucion anterior. SAX es bueno pero no es a nivel de objetos. Recorres mucho lo malo. Es bueno para XML pequeños pero para XML gigantescos es un perdida en tiempo muy pero muy grande ...

Saludos...