domingo, 24 de mayo de 2009

Taller2: Bloque T2.10

1. Hacer un filtro SAX que traduzca el célebre XML casero de etiquetas en español a etiquetas en inglés.

El código en ruby es el siguiente:

#!/usr/bin/ruby

#Librerias
require 'rexml/document'
require 'rexml/streamlistener'
include REXML

#Archivo xml pasado como argumento
file=ARGV[0]


#Diccionario
traduce= {
"micasa"=>"myhouse",
"habitacion"=>"room",
"mueble"=>"furniture",
"televisión"=>"TV",
"mesa"=>"table",
"sofá"=>"sofa",
"puerta"=>"door"}

#Definimos la clase
class Traduce
include StreamListener

def initialize(tags)
#Variables de instancia
@traduce=tags
@escribe = false
end

#Eventos
#Comienzo de etiqueta
def tag_start(name, attributes)
#Español --> Inglés
puts "<"+@traduce[name]+">"
#Dentro de la etiqueta mueble hay texto dentro por eso se permite escribir
if (name == "mueble")
@escribe = true
end
end

#Final de una etiqueta
def tag_end(name)
#Español --> Inglés
puts ""
@escribe=false
end

#Imprime el texto si está activado @escribe
def text(text)
if @escribe
puts @traduce[text]
end
end

#Fin de la clase
end


listener = Traduce.new(traduce)
parser = Parsers::StreamParser.new(File.new(file), listener)
parser.parse



y para probarlo escribimos en el terminal:
ruby ./ejer210.rb muebles.xml

No hay comentarios: