XML
Vamos a jugar con el ejemplo de w3schools que se encuentra en http://www.w3schools.com/xml/xml_attributes.asp
<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>
Lo vamos a guardar en un fichero llamado "example.xml".
Importación
La fase de importación y parsing la hace la propia librearía. Lo que no está tan bien explicado en la documentación es cómo ir consiguiendo los registros sucesivamente y el valor de los campos de los mismos.
Vamos a probar un script como el siguiente
require 'nokogiri'
fichero='./example.xml'
xmlfeed = Nokogiri::XML(open(fichero))
all_items = xmlfeed.xpath("//messages/note")
fields = [ 'to','from','heading','body' ]
all_items.each do |item|
fields.each do |f|
entrada = item.at(f)
valor = entrada.text
puts "#{f} = #{valor}"
end
end
#Fin del script
Vamos por partes.
La importación se hace con el bloque:
xmlfeed = Nokogiri::XML(open(fichero))
all_items = xmlfeed.xpath("//messages/note")
Para el fichero podríamos tirar de URL también.
Hasta ahora nosotros no hemos dicho nada de la estructura del XML... ¿ O si ? Si. La librería ha importado todo el XML, pero le hemos dicho que los regustros son eso que está dentro de la estructura de documento en el segundo nivel, esto es "//messages/note". Esto es una de las cosas que debemos hacer bien porque si no el desglose en registros no se hace correctamente.
Los campos que vamos a estudiar deben ser conocidos. Responden a una estructura predeterminada.
fields = [ 'to','from','heading','body' ]Por supuesto que podríamos obtenerlos pero no complicaremos más el ejemplo.
Finalmente para ilustrar el ejemplo, imprimimos los campos uno a uno por consola.
No hay comentarios:
Publicar un comentario