Abrir xml

Hola, soy nuevo en Ruby y hace varios días que estoy intentando abrir un
xml y no lo consigo, no encuentra el archivo.

Mi intención es crear un directorio /xml para que contenga las
traducciones de las páginas(menu_es.xml, menu_en.xml por ejemplo).
Supongo que lo mejor es crear el directorio xml desde public.

Creo que no he entendido bien algun concepto para manejar las rutas y
acceder desde una ruta relativa.

Alguién me puede facilitar algún ejemplo practico o dar ideas de como
hacerlo.

Muchas gracias.

Àlex

Yo uso un archivo “semi” xml (Es para pasar información a gráficos en
FusionChart http://www.fusioncharts.com/), lo almaceno en una carpeta
llamada ArchivosDatos en public y accedo a ellos en una función que
defino
en un controller a traves de la ruta: “/ArchivosDatos/”+archivo+“.xml” y
funciona sin ningún problema.

El día 24/10/07, Alex M. [email protected]
escribió:

Tengo un directorio desde public llamado traduc y no puedo abrirlo, lo
llamo de la siguiente forma desde un controlador:

arxiu=File.open("./traduc/menu_es.xml",“r”)

arxiu= File.open ("/traduc/menu_es.xml",“r”)
arxiu= File.open (“traduc/menu_es.xml”,“r”)

y nada, includo he copiado menu_es.xml en public y llamandolo así:

arxiu=File.open(“menu_es.xml”,“r”)

y no se queja pero parece que lo cargue vacío.

¿Alguna idea?

Gracias

Hola Alex,

supongo que alguna de estas formas te servira

arxiu=File.open(’…/…/public/traduc/menu_es.xml’,“r”)
arxiu=File.open(File.join(File.dirname(FILE),
‘/…/…/public/traduc/menu_es.xml’),“r”)

Date cuenta que tu controlador esta en app/controllers para llegar a
public tienes que bajar dos niveles.

Un saludo.

Alex M. escribió:

En la primera opción:

arxiu=File.open(’…/…/public/traduc/menu_es.xml’,“r”)

me muestra el error:
No such file or directory -public/traduc/menu_es.xml

En la segunda:

arxiu=File.open(File.join(File.dirname(FILE),

si me abre la página, pero si visualizo el resultante de arxiu aparece
una #

Quizás sea algun problema con Windows que no lo lee igual, actualmente
estoy trabajando bajo windows con el InstantRails, en el servidor si
tengo linux.

No sé si podría ser el problema.

¿Alguna idea más?

Gracias

Bueno, yo uso una función en un controller para crear un archivo xml,
que
luego el fusioncharts lee y tambien tengo otra que me lee datos de
configuración desde una aplicación hecha en mono, este es la función:

#Leo el xml donde están las configuraciones de la intranet para
#conocer cuál es el nombre de la cookie.
def nombre_cookie
doc=Document.new(File.new(“/var/www/intranet/Web.Config”))
raiz=doc.root
raiz.elements[‘appSettings’].elements.each do |e|
@result=e.attributes[‘value’] if
e.attributes[‘key’]==‘NombreCookie’
end
@result
end

En el principio de la clase le coloco: “include REXML” y funciona bien.

El día 25/10/07, Alex M. [email protected]
escribió:

Alex M. wrote:

En la primera opción:

arxiu=File.open(‘…/…/public/traduc/menu_es.xml’,“r”)

[1] “Rails y XML como herramienta de Integración”, ponencia presentada
por Javier R. de aspgems.com en la conferencia rails 2006.

[2] En Rails tienes la clase XmlSimple.

[3] Ruby en su libreria standard trae consigo un toolkit para procesar
XML llamado REXML.

[1]

[2] http://api.rubyonrails.org/classes/XmlSimple.html

[3] http://www.germane-software.com/software/rexml/docs/tutorial.html

Espero te sirva.

Jaime Mora R.

Muy bien, ya lo conseguí! Al final lo he hecho de la siguiente forma:

doc=Document.new(File.new(“public/traduc/menu_es.xml”))

Igualmente intentaré depurarlo más y leer toda la documentación que me
habeis pasado.

Supongo que mi falta de tiempo no ayuda a aprender rápido.

Gracias Werner, CartuchoGL, Javier y Jaime.

Hola,

arxiu=File.open(File.join(File.dirname(FILE),

si me abre la página, pero si visualizo el resultante de arxiu aparece
una #

pues… como no pegas código no sé muy bien qué quieres decir con eso de
al visualizar el resultante. Entiendo por lo que comentas que estás
intentando hacer un File.open y luego sobre el resutado arxiu haces un
puts?

Si es así, es normal que te diga algo “raro”, ya que lo que estás
haciendo es crear un objeto de tipo File y estás directamente pidiéndole
que te vuelque el objeto. Si lo que quieres es leer un archivo y
quedarte sólo con el contenido, puedes probar con File.read.

El API de File seguro que trae más métodos interesantes por descubrir :wink:

y, ya puestos, cuando trabajes con Rails te recomendaría usar tus rutas
a partir de la constante RAILS_ROOT, que es la raíz de tu proyecto, y
así evitas sorpresas. FILE es una constante de ruby que indica el
fichero actual, y como te metas en subdirectorios te va a ir cambiando
el dirname.

Es decir
File.join(‘RAILS_ROOT’,‘directorio_que_quieras’,‘ficheroquequieras’)

Saludos,

javier ramírez