Parseando XML con Xmlstarlet
lunes, 4 de abril de 2011Estoy introduciendo algunas mejoras en las galerías de fotografía y vídeo incorporando algunas cabeceras HTML nuevas que faciliten la integración con el nuevo botoncito de Facebook. A consecuencia de esto y para manejar los datos XML que ofrece Flickr me he puesto a trastear con Xmlstarlet una aplicación para interpretar xml en consola que parece bastante completa y potente.
En los repositorios básicos de openSuse se encuentra la última versión. El programa y el instalador son Xmlstarlet pero en consola el ejecutable es simplemente xml. Aqui un txt con buen puñado de ejemplos de uso.
Xmlstarlet no es que sea dificil de manejar sino que pasa como con las expresiones regulares: si no estás muy concretado en la línea que escribes te pierdes y si pasas mucho tiempo con él acabas pillando un mareo considerable. Y por si fuera poco hay que sumar el problemas de la acentuación del idioma y al codificación de caracteres. Creo que el término correcto es: farragoso.
Pero es potente, versatil y permite en una línea realizar tareas que serían relativamente complejas de otro modo (como ir descargando XML de Flickr y pasandolos a MySQL).
Un par de ejemplos de uso
Un modo tosco de consultar lo último publicado en meneame.net
curl -s -g "http://www.meneame.net/rss2.php" | xml sel -t -m "/rss/channel/item" -v "title" -o " (" -v "link" -o ")" -n
salida:
Un exploit del Partido Pirata francés convierte la web de Hadopi en The Pirate Bay (http://m.menea.me/q5cj)
Los presupuestos de cada ayuntamiento de España explicados (http://m.menea.me/q5k7)
Los coquetos burdeles de Japón donde puedes pasar un buen rato con Hello Kitty (si te apetece). (http://m.menea.me/q5kx)
Camps: ´Hemos ganado, se va para siempre una mala persona´ (http://m.menea.me/q5gd)
Merkel instó hoy a la industria alemana a desarrollar las energías renovables (http://m.menea.me/q5im)
Primeras imágenes de la fuga de agua radioactiva de Fukushima en el reactor 2 [CAT] (http://m.menea.me/q585)
Alemania pide facilitar la enseñanza de su idioma en los institutos españoles (http://m.menea.me/q5hu)
La inyección de una espuma plástica no frena el escape de agua radiactiva (http://m.menea.me/q5kp)
Terremoto de 7.1 en el sur de Java Indonesia y alerta por tsunami (http://m.menea.me/q5km)
Djokovic gana el Masters 1000 de Miami (http://m.menea.me/q5ka)
¿Venderías tus principios por 500 millones? (http://m.menea.me/q5gi)
BP obtiene permiso para volver a operar en el Golfo de México (http://m.menea.me/q5hi)
Yo también quiero ser Esperanza Aguirre (o por lo menos tener los mismos médicos que ella) (http://m.menea.me/q5id)
'Spain is different' hasta en los títulos de las películas (http://m.menea.me/q5bw)
Iberdrola desarrolla el primer "aerogenerador submarino" del mundo (http://m.menea.me/q5hv)
Una juez niega a un padre la custodia compartida de sus hijos por perder su empleo (http://m.menea.me/q583)
El fútbol español y la NBA (http://m.menea.me/q569)
La inventora española de las 448 patentes (http://m.menea.me/q57i)
El mensaje de ETA-PP (http://m.menea.me/q4j1)
El reiki se cuela en el más importante congreso español de estudiantes de medicina (http://m.menea.me/q5b8)
¿Copago en la sanidad?, ¡Menuda estupidez, ya la pagamos al 100%! (http://m.menea.me/q5eb)
Doblete en MotoGP: Lorenzo 1º y Pedrosa 2º (http://m.menea.me/q5cf)
Cinco consejos para que tus hijos lean (http://m.menea.me/q51u)
Aspirante a empleo sin sueldo (http://m.menea.me/q59c)
La Hacienda de Gipuzkoa descubre una bolsa de fraude fiscal de casi 1.130 millones (2007-2010) (http://m.menea.me/q551)
Lo que vemos nosotros comparado con lo que ven los niños [ENG] (http://m.menea.me/q58n)
Estados Unidos: "¡Traten con dignidad al soldado Manning!": Amnistía Internacional España (http://m.menea.me/q588)
Alemania va bien, los alemanes no tanto (http://m.menea.me/q5a2)
La Unión Europea se plantea eliminar el 'Erasmus para todos' (http://m.menea.me/q59f)
Un periodista de Intereconomía, detenido por intento de agresión a un policía (http://m.menea.me/q58i)
El Govern valenciano y Calatrava amenazan a IU con querellas (http://m.menea.me/q53f)
Islandia enjaula a sus banqueros (http://m.menea.me/q54k)
El retraso en los pagos de los ayuntamientos valencianos y el Consell ha acabado con 60.000 empresas (http://m.menea.me/q55y)
Cae director de periódico progresista (http://m.menea.me/q56g)
El ascenso y la caída del hombre que inventó el ordenador portátil [eng] (http://m.menea.me/q4t4)
Badenes ilegales y peligrosos: puedes denunciar (http://m.menea.me/q54l)
Hallados muertos dos trabajadores de la central de Fukushima (http://m.menea.me/q55a)
La DGT no puede poner multas en vías urbanas (http://m.menea.me/q4xu)
El 75% de las colmenas españolas están enfermas (http://m.menea.me/q4xa)
Valdecilla descubre cómo eliminar el tumor cerebral más dañino que existe (http://m.menea.me/q544)
Técnicos de Fukushima esperan morir en semanas (http://m.menea.me/q53b)
Judit Ignacio, de 16 años, bate el récord de España de los 100 mariposa (http://m.menea.me/q51c)
Hormigas explosivas y suicidas (http://m.menea.me/q52r)
Ordenador Personal IBM AT. 40 MB... por solo 1.888.600 pesetas (http://m.menea.me/q50u)
Desaparecidas 2.200 bolas de combustible nuclear en Alemania [DE] (http://m.menea.me/q524)
Detenido el propietario de un perro que falleció tras dejarlo encerrado en el coche (http://m.menea.me/q4zp)
Zombies sedientos de sangre invaden Madrid (http://m.menea.me/q4wi)
El Capitalismo, explicado por Calvin & Hobbes (http://m.menea.me/q4k2)
Se teme nube radioactiva sobre Tokio (http://m.menea.me/q50b)
¿Cuántas horas lleva aprender un idioma extranjero? (http://m.menea.me/q4td)
O para consultar Google Weather (ojo al uso de iconv para convertir a utf-8)
curl -g "http://www.google.com/ig/api?weather=cartagena,spain&hl=es" -s | iconv -f iso-8859-1 -t utf-8 | xml sel -t -m "/xml_api_reply/weather/current_conditions" -v "concat(condition/@data,', ',temp_c/@data,'ºC, ',humidity/@data)" -n -m "/xml_api_reply/weather/forecast_conditions" -v "concat('Previsto para el ', day_of_week/@data,':',high/@data,'ºC, ',condition/@data,'.')" -n
salida:
Parcialmente nublado, 20ºC, Humedad: 56%
Previsto para el lun:25ºC, Mayormente soleado.
Previsto para el mar:24ºC, Despejado.
Previsto para el mié:25ºC, Mayormente soleado.
Previsto para el jue:23ºC, Mayormente soleado.
CBourse
#1/ 03 de May/2012 a 06:11:19
Otros comentarios de «CBourse»
Hola Miguel....
Estoy tratando de usar el mismo programa (xmlstarlet) para convertir a sentencias de sql informacion extraida de un archivo xml, pero no tengo como agregar en la salida el caracter "'"(ascii 39). ¿tuviste la misma dificultad? ¿como lo solucionaste?.
Gracias y Saludos Ce,.
Trebol-a
#2/ 03 de May/2012 a 11:24:24
Otros comentarios de «Trebol-a»
Hola CBourse,
las dichosas comillas en XML pueden ser una locura. Creo recordar que tuve un problema similar hace tiempo con las comillas dobles y creo que lo solucioné haciendo una busqueda y reemplazo de " por &_quot; (sin barra baja claro)
Miguel
#3/ 05 de May/2012 a 10:36:12
Otros comentarios de «Miguel»
Saludos CBourse,
Como habrás advertido, es Trebol-A el que sabe de esto que preguntas (de eso, y de muchísimas cosas más). Para mi eso es tan incomprensible como la lógica que lleva a un trabajador a votar al PP una vez y otra. Es un misterio.
Trebol-a
#4/ 05 de May/2012 a 12:15:23
Otros comentarios de «Trebol-a»
jajaja, no veía el momento de darle una patadita en los huevos al PPvotante! :D
Miguel
#5/ 05 de May/2012 a 18:52:36
Otros comentarios de «Miguel»
Bueno, sí, pero estoy haciendo autocrítica, que conste :-)
18 de December, 2024 @ 16:44