Historiquement le constructeur XML a été la première méthode de création de template pour Ruby On Rails. Aujourd’hui, l’utilisation de template rhtml est plus courante car elle semble plus intuitive, surtout si l’on connait le language HTML. Toutefois, les modèles .rxml restent très simples d’utilisation et rendent la création de document XML vraiment aisée.
Voici une introduction sur la syntaxe à utiliser pour générer un document xml.
Définir une balise contact :
xml.contact
<contact />
Définir une balise nom dans contact :
xml.contact do
xml.nom
end
<contact>
<nom />
</contact>
Définir une balise name ayant comme noeud texte Olivier dans contact
xml.contact do
xml.nom("Olivier")
end
<contact>
<nom>Olivier</nom>
</contact>
Définir une balise telephone avec avec un attribut type et contenant un numéro.
xml.telephone("+41 21 123 45 67", :type => 'home')
<telephone type="home">+41 21 123 45 67</telephone>
Il est également très simple d’ajouter la balise de déclaration XML.
xml.instruct!
<?xml version="1.0" encoding="UTF-8"?>
Il est possible, quoique rarement utile, de passer d’autres paramètres à cette balise
xml.instruct!('my_strange_format', :encoding => "ISO-8859-15", :version => "2.9")
<?my_strange_format encoding="ISO-8859-15", version="2.9"?>
Nous sommes désormais en mesure de créer notre premier document xml complet, voici le code que nous pourrions utiliser :
xml.instruct!
xml.contact do
xml.prenom("Olivier")
xml.nom("Amblet")
xml.adresse do
xml.rue("Ch. de la Pommeraie 8")
xml.ville("Prilly")
xml.npa("1008")
end
xml.telephones do
xml.numero("+41 21 123 45 67", :type => "maison")
xml.numero("+41 76 123 45 67", :type => "mobile")
end
end
Ce qui générerait :
<?xml version="1.0" encoding="UTF-8"?>
<contact>
<Olivier< /prenom>
<nom>Amblet< /nom>
<adresse>
<rue>Ch. de la Pommeraie 8< /rue>
<ville>Prilly< /ville>
<npa>1008< /npa>
< /adresse>
<telephones>
<numero type="maison">+41 21 123 45 67< /numero>
<numero type="mobile">+41 76 123 45 67< /numero>
< /telephones>
< /contact>
Une belle utilisation des possibilités de ruby.
Cette façon de faire met bien en valeur les atouts du language Ruby dans le but de rendre le code plus lisible et plus intuitif. Les blocks (do … end) permettent de structurer l’arborescence de façon naturelle, l’instance XML::Builder (nommée xml) récupère les noms de méthodes inexistantes est défini à la volée une balise portant le même nom, ingénieux. Si le premier paramètre est une chaîne, il s’agira du contenu textuel. Enfin, tous les attributs nécessaires sont transmis dans le dernier argument, un dictionnaire. Le résultat est un code facile à lire et bien structuré. Enfin, il faut savoir que d’autres éléments de la syntaxe ruby peuvent être utilisé, tel que boucles, conditions ou sélecteur.
Un exemple plus proche de la réalité
xml.instruct!
xml.contact do
@contact.each do |qqn|
xml.prenom(qqn.prenom)
xml.nom(qqn.nom)
xml.adresse do
xml.rue(qqn.adresse.rue)
xml.ville(qqn.adresse.ville)
xml.npa(qqn.adresse.npa)
end
xml.telephones do
qqn.telephones.each do |tel|
if tel.maison?
xml.numero(tel.numero, :type => "maison")
else
xml.numero(tel.numero, :type => "mobile")
end
end
end
end
end
Attention aux entité HTML
Par défaut le constructeur XML échappe les caractères spéciaux tel que &, <, etc. C’est problèmatique pour le rendu de source HTML car les caractères sont échappés deux fois. Heureusement la méthode << permet de passer outre.
Au lieu de faire un rendu standard
xml.body(html_source)
on utilisera la méthode << :
xml.body do
xml << html_source
end
Recent Comments