{"id":88,"date":"2005-11-08T20:31:08","date_gmt":"2005-11-08T19:31:08","guid":{"rendered":"http:\/\/www.gatellier.be\/blog\/?p=88"},"modified":"2009-04-27T15:25:59","modified_gmt":"2009-04-27T13:25:59","slug":"rss-pour-les-humains-xsl-et-votre-xml-est-lisible","status":"publish","type":"post","link":"https:\/\/gatellier.be\/blog\/rss-pour-les-humains-xsl-et-votre-xml-est-lisible\/","title":{"rendered":"RSS pour les humains: XSL et votre XML est lisible"},"content":{"rendered":"<p>Il vous est certainement d\u00e9j\u00e0 arriv\u00e9 de tomber sur des liens myst\u00e9rieux: en cliquant une <a href=\"\/\/www.stervinou.com\/\">petite image labelis\u00e9e rss<\/a> vous arrivez sur une page illisible pour le commun des mortels. C&#8217;est un <a href=\"\/\/fr.wikipedia.org\/wiki\/Really_Simple_Syndication\">flux rss<\/a>.<\/p>\n<p style=\"text-align:center;\"><a href=\"\/\/www.gatellier.be\/blog\/?pp_album=1&#038;pp_image=rss_pour_les_logiciels.jpg\" title=\"avant: RSS Illisible pour les humains\"><img loading=\"lazy\" decoding=\"async\" src=\"\/\/www.gatellier.be\/blog\/wp-content\/photos\/thumb_rss_pour_les_logiciels.jpg\" width=\"130\" height=\"86\" alt=\"avant: RSS Illisible pour les humains\" class=\"centered\" \/><\/a> <a href=\"\/\/www.gatellier.be\/blog\/?pp_album=1&#038;pp_image=rss_pour_les_humains.jpg\" title=\"Apr&Atilde;&uml;s: RSS lisible par les humains.\"><img loading=\"lazy\" decoding=\"async\" src=\"\/\/www.gatellier.be\/blog\/wp-content\/photos\/thumb_rss_pour_les_humains.jpg\" width=\"130\" height=\"86\" alt=\"Apr&Atilde;&uml;s: RSS lisible par les humains.\" class=\"centered\" \/><\/a><\/p>\n<p>A quoi servent-ils? A suivre de l&#8217;information rapidement sans devoir charger tout un site.<\/p>\n<p>Normalement, on emploie un aggr\u00e9gateur de flux pour les parcourir d&#8217;un coup d&#8217;oeil. Il en existe de <a href=\"\/\/www.hebig.org\/blogs\/archives\/main\/000877.php\">nombreux logiciels<\/a> ou <a href=\"\/\/www.bloglines.com\/?Lang=french\">sous forme de<\/a> <a href=\"\/\/www.netvibes.com\/\">site web<\/a>.<\/p>\n<p>Gr\u00e2ce \u00e0 mon <a href=\"\/\/www.bradsoft.com\/feeddemon\/index.asp\">aggr\u00e9gateur pr\u00e9f\u00e9r\u00e9<\/a>, je surveille presque quotidiennement une bonne 50taine de sites gr\u00e2ce \u00e0 leurs rss. Un titre m&#8217;article m&#8217;int\u00e9resse? Hop, je clique et je lis.<\/p>\n<h3>Un RSS lisible<\/h3>\n<p>L\u00e0 o\u00f9 le b\u00e2t blesse, c&#8217;est quand un utilisateur non-confirm\u00e9 clique un lien pointant vers le fichier rss. Il se trouve confront\u00e9 \u00e0 une page incompr\u00e9hesible faite de code. Ce sera une exp\u00e9rience vraiment mauvaise.<\/p>\n<p><!--more--><\/p>\n<p>Evidemment, il existe une solution: un petit <a href=\"\/\/fr.wikipedia.org\/wiki\/XSL\">fichier nomm\u00e9 xsl<\/a> qui mettra en page le fichier xml.<\/p>\n<p>En pratique, il vous faudra cr\u00e9er <a href=\"\/\/www.gatellier.be\/blog\/wp-content\/themes\/default\/gatellier.xsl\">ce fichier<\/a> et le lier \u00e0 votre flux RSS.<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\r\n&lt;?xml-stylesheet type=&quot;text\/xsl&quot; href=&quot;gatellier.xsl&quot;?&gt;\r\n<\/pre>\n<p>On a d\u00e8s lors, une belle scission entre le contenu (fichier xml), le layout (fichier xsl) et pourquoi pas les comportements (fichier js).<\/p>\n<h4>Dans le code du fichier XSL<\/h4>\n<p>Quand vous ouvrez <a href=\"\/\/www.gatellier.be\/blog\/wp-content\/themes\/default\/gatellier.xsl\">ce fichier<\/a>, qui est aussi un format xml, vous pouvez vous rendre compte qu&#8217;il contient de l&#8217;html plus certains tags xsl<\/p>\n<p>En fait, il prend le fichier xml qu&#8217;il va parser et en fonction de ce qui y est, il construira un fichier html qui lui est compr\u00e9hensible par votre browser et donc lisible par un humain.<\/p>\n<p>La partie la plus int\u00e9ressante est le code:<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;xsl:for-each select=&quot;rss\/channel\/item&quot;&gt;\r\n &lt;xsl:value-of select=&quot;title&quot;\/&gt;\r\n&lt;\/xsl:for-each&gt;\r\n<\/pre>\n<p>Le template va parcourir le document xml \u00e0 la recherche de nodes <code>items<\/code> qui sont enfants de nodes <code>channel<\/code>, eux-m\u00eame enfants de <code>items<\/code>.<\/p>\n<p>En fait, c&#8217;est la structure de mon fichier xml que j&#8217;ai parcouru en cherchant les \u00e9l\u00e9ments qui m&#8217;int\u00e9ressent.<\/p>\n<p>C&#8217;est comme \u00e7a que <a href=\"\/\/feeds.feedburner.com\/gatellier\">FeedBurner<\/a> cr\u00e9e des pages lisibles \u00e0 partir de vos flux RSS.<\/p>\n<h4>En savoir plus<\/h4>\n<p>Evidemment cette technique ne marche pas sur tous les browsers.<\/p>\n<ul>\n<li>Opera ne supporte pas les XSL<br \/>\n<blockquote><p>\n<a href=\"\/\/www.opera.com\/docs\/specs\/\">Opera does not support XSL formatting objects, and neither does it natively support XSLT transformations. XML documents transformed server side will be parsed and displayed by Opera just like any other XML document.<\/a>\n<\/p><\/blockquote>\n<\/li>\n<li>\n<a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=98168\">un bug de rendu de Firefox<\/a> ne permettra pas d&#8217;afficher certains caract\u00e8res sp\u00e9ciaux correctement. Mais il existe <a href=\"\/\/marc.abramowitz.info\/archives\/2005\/05\/22\/using-xslt-to-create-a-nice-rendering-of-rss-feeds\/\">une solution en php pour WordPress<\/a>\n<\/li>\n<\/ul>\n<p>Pour mieux conna\u00eetre les XSL<\/p>\n<ul>\n<li><a href=\"\/\/www.w3schools.com\/xsl\/default.asp\">l&#8217;article de w3schools sur les Templates XSL<\/a><\/li>\n<li><a href=\"\/\/www.xml.com\/pub\/a\/2000\/08\/holman\/\">What is XSLT sur XML.com<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Il vous est certainement d\u00e9j\u00e0 arriv\u00e9 de tomber sur des liens myst\u00e9rieux: en cliquant une petite image labelis\u00e9e rss vous arrivez sur une page illisible pour le commun des mortels. C&#8217;est un flux rss. A quoi servent-ils? A suivre de l&#8217;information rapidement sans devoir charger tout un site. Normalement, on emploie un aggr\u00e9gateur de flux [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,30,51,10,19,20],"tags":[],"class_list":["post-88","post","type-post","status-publish","format-standard","hentry","category-browsing","category-code","category-html","category-tutorial","category-xml","category-xslt"],"_links":{"self":[{"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/posts\/88","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/comments?post=88"}],"version-history":[{"count":0,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/posts\/88\/revisions"}],"wp:attachment":[{"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/media?parent=88"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/categories?post=88"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/tags?post=88"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}