Procesar XML desde Ruby

Ruby se ha convertido en mi lenguaje de script preferido, y no sólo por ser la palabra de la izquierda en “Ruby on Rails”. Ruby es perfecto para otras tareas como lenguaje de script y lo podemos usar hasta como herramienta complementaria, como una utilidad más en nuestro trabajo.

Por ejemplo, en un proyecto un cliente me facilitó un enorme fichero XML que me tenía que encargar de procesar para extraer sus datos, pero el cliente no sabía indicarme exactamente qué campos contenía este fichero XML. Así que en una primera fase era necesario inspeccionar todo el XML y ver qué campos contenían las entidades “item”.

Para hacernos una idea, este fichero de 20 Mb tenía una estructura similar a esta:

  1. <ecinventoryentries>
  2.  
  3.   <item>
  4.  
  5.     <ecnumber>200-001-8</ecnumber>
  6.  
  7.     <name>formaldehído</name>
  8.  
  9.     <casnumber>50-00-0</casnumber>
  10.  
  11.     <molecularformula>CH2O</molecularformula>
  12.  
  13.   </item>
  14.  
  15. </ecinventoryentries>

Algo así, pero repetido unas 100.000 veces, y en cada item podía haber diferentes tipos de campos…

…¿Cómo procesamos esto? ¡Ruby al rescate! Echando mano de la librería REXML, y con este pequeño script, conseguimos procesar el fichero XML en unos 5 minutos (REXML no es muy rápido, de todos modos, son 100.000 items, o sea, unos 333 items/segundo)

  1.  
  2. require "rexml/document"
  3. include REXML
  4. nombres = ""
  5. doc = Document.new File.new("demo.xml")
  6. doc.elements.each("*/ECInventory/ecInventoryEntries/item") do |i|
  7.         i.elements.each do |e|
  8.                 nombres << " "+e.name if !nombres.include? " "+e.name
  9.         end
  10. end
  11. puts nombres

Y el resultado…

  1.  
  2. $ ruby procesadorxml.rb
  3. ecNumber name casNumber molecularFormula description

2 comments ↓

#1 David on 10.10.07 at 3:04 am

No he entendido muy bien la utilidad de esto. Buscaba algo relacionado con crear un xml sobre Ruby. Para meter los datos de un B.D y coger-los luego con Flash y Actionscript.

Es una galería de imágenes. Seguiré buscando, de todas formas me alegro de haber visto que parece senzillo trabajar con xml des de Ruby (Como no podía ser de otra forma!) :)

#2 Jaime Iniesta on 10.10.07 at 7:57 am

Hola David, esto era un ejemplo de procesado de un XML desde Ruby, o sea, de lectura de un XML, no de escritura de XML.

Leave a Comment