sábado, 30 de mayo de 2009

Taller2: Bloque T2.12

1. Poner la expresión XPath que en el XML de la cassa imprima los nodos que tengan puerta a una habitacion determinada

El código XML:
micasa>
habitacion id="cuarto de baño">
mueble>aparador< /mueble>
mueble>bañera< /mueble>
puerta a="pasillo">
/habitacion>
habitacion id="pasillo">
mueble>cuadro< /mueble>
puerta a="cuarto de baño">
puerta a="dormitorio">
< /habitacion>
< /micasa>

El código en Ruby es:

#!/usr/bin/ruby

require 'rexml/document'
include REXML
documento = ARGV[0]
habitacion = ARGV[1]
file = File.new(documento)
doc = Document.new(file)
XPath.each(doc,"//puerta[@a=\""+habitacion+"\"]/..") { |habitaciones|
puts "*"+habitaciones.attribute('id').to_s
}


Con esto le decimos: que busque las puertas de una habitación pasada como parámetro (gracias al atributo @a). Luego pasa a cadena de caracteres el identificador de las habitaciones y lo muestras por pantalla.Ejemplo:

ruby ./ejer212a.rb pasillo
*cuarto de baño


2.Imprimir de un documento XML con los equipos de futbol los que estén clasificados para la liga de campeones

Documento en Ruby:

#!/usr/bin/ruby

require 'rexml/document'
include REXML
documento = ARGV[0]
file = File.new(documento)
doc = Document.new(file)

#Buscamos los equipos que tengan una posicion en la lista menos o igual que 4
XPath.each(doc,"//equipo[position()<=4]") { |equipos|
puts "*"+equipos.text
}


Documento en XML

champion>
equipo posicion="1"> Olula del Rio/equipo>
equipo posicion="2"> Real Madrid/equipo>
equipo posicion="3"> Almeria/equipo>
equipo posicion="4"> Granada/equipo>
equipo posicion="5"> Olula/equipo>
equipo posicion="6"> Betis/equipo>
equipo posicion="7"> Barca/equipo>
/champion>

Ejemplo:

ruby ./ejer212b.rb champion.xml
* Olula del Rio
* Real Madrid
* Almeria
* Granada

No hay comentarios: