2009-12-04 7 views
4

J'ai un fichier xml et je veux afficher (rendre) comme il est à l'utilisateur, je veux garder les balises. Comment dois-je faire dans RoR?comment afficher un fichier xml exsiting à l'utilisateur dans RoR

J'ai essayé render :file=>"/path/to/file.xml", mais l'étiquette <product> a disparu.

//file.xml 
<product>car</product> 

Mise à jour: Je trouve le comportement est dépendant browers-

  • Mozilla/5.0 (X11; U; Linux i686; fr; rv: 1.9.0.3) Gecko/2008101315 Ubuntu/8.10 (intrépide) Firefox/3.0.3

    Les étiquettes sont conservées.

  • Mozilla/5.0 (Windows; U; Windows NT 5.1, zh-CN; rv: 1.9.0.15) Gecko/2009101601 Firefox/3.0.15

    Les balises ont disparu.

Répondre

6

Avez-vous essayé d'ajouter

:content_type => 'application/xml' 

à votre ligne rendre?

render :file=>"/path/to/file.xml", :content_type => 'application/xml' 
+0

Salut, ce qui ne fonctionne toujours pas sur ma version de Windows Mozilla. – pierrotlefou

+0

Wow, de plus amples recherches montre que c'est en effet le navigateur qui est dans le chemin ici. IE8 (pour ce que ça vaut) affiche le xml comme prévu. Dans la mesure où ma recherche google a montré, cela semble être une sorte de guerre religieuse au sein de mozilla quant à ce que serait la bonne chose [tm]. On dirait que vous êtes perdu ici, désolé. – jhwist

+0

Plus d'enquête montre que chaque fois qu'un fichier XML ressemble à html à distance (par nom de tags, dans mon test en utilisant http://www.w3schools.com/xmL/note.xml il y a une balise "body") le Windows Firefox (ou peut-être juste Gecko/2009101601, qui est ce que j'ai aussi) rend seulement le texte, pas les éléments. – jhwist

0

Ajouter une ligne de Prolog xml dans le fichier (en plus de la suggestion du type de contenu de jhwist).

<?xml version="1.0"?> 
3

Différents navigateurs affichent XML différemment. Certains essaient d'être intelligent, d'autres ne le font pas. Vous ne pouvez pas compter sur cela. Si vous souhaitez afficher XML "tel quel", vous devez convertir le texte XML échappé en texte.

Dans votre contrôleur d'action vous devrez appeler ceci:

render :text => @template.h(File.read("/path/to/file.xml")) 

Cela échappera à tout HTML pour vous et agir en tant que texte brut.

+0

Cela ne fonctionne plus dans un contrôleur dans Rails v3.2.20. Cependant, 'render: text => xml_string.html_safe,: content_type => 'application/xml'' a fonctionné. – spyle

0

ou mieux encore

render :text => File.read("/path/to/file.xml"), :content_type => 'application/xml'