martes, 5 de mayo de 2009

AAP Bloque T2.10: Hacer un filtro SAX que traduzca el célebre XML casero de etiquetas en español a etiquetas en inglés. Hacerlo en Ruby o en otro leng

Fichero xml utilizado:

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Descripción de los elementos de una casa soñada -->
<micasa>
<habitacion id="comedor">
<mueble>aparador</mueble>
<mueble>sofa</mueble>
</habitacion>
<habitacion id="cocina">
<mueble>lavaplatos</mueble>
<mueble>fregadero</mueble>
</habitacion>

</micasa>


Código ruby utilizado:

#!c:\ruby\bin\ruby.exe
require 'rexml/document'
require 'rexml/streamlistener'
require 'cgi'
include REXML

file=ARGV[0]

diccionario = {"micasa"=>"myHouse",
"habitacion"=>"room",
"mueble"=>"furniture",
}

class Traduce

include StreamListener
def initialize(dic)
@escribe = false
@diccionario=dic
end

def tag_start(name, attributes)
puts "<"+@diccionario[name]+">"
if (name == "mueble")
@escribe = true
end
end

def tag_end(name)
puts "</"+@diccionario[name]+">"
@escribe=false
end

def text(text)
if @escribe
if @diccionario[text]
puts @diccionario[text]
else
puts text
end
end
end

end

print "Content-Type: application/xhtml+xml\n\n"

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


Resultado:


Content-Type: application/xhtml+xml

<myHouse>
<room>
<furniture>
aparador
</furniture>
<furniture>
sofa
</furniture>
</room>
<room>
<furniture>
lavaplatos
</furniture>
<furniture>
fregadero
</furniture>
</room>
</myHouse>

No hay comentarios: