Les variables dans une feuille de style XSL

Posté le 2006-09-15

Jusqu'à maintenant les nouvelles générées et rassemblées à partir des flux RSS de mes sites préférés présentaient un petit défaut. Le bloc menu "Nouvelles de cette page" contenait une série de liens qui devaient pointer sur les titres de chaque nouvelle de la même page. Chaque nouvelle comporte un lien à la fin de celle-ci et permet ainsi d'aller lire l'article correspondant sur le site original. Hors les liens qui étaient générées dans le bloc menu pointaient directement sur le site original.

Chacune des pages des nouvelles du front est une page HTML qui est générée, lors de la compilation de mon site, à partir d'un flux RSS dont le contenu est dans un format XML particulier. De plus en plus de sites web ou blogs offrent cette forme de diffusion de l'information sous forme d'un ou plusieurs fichiers XML. tuxcoffee.net diffuse son propre flux RSS. J'ai écrit une feuille de style XSL qui me permet via un moteur XSLT de transformer ces fichiers XML en pages HTML.

J'ai modifié la feuille de style XSL permettant de générer les pages HTML des nouvelles du front afin de retrouver le comportement voulu. J'ai dû pour cela utiliser une variable XSL.

Chaque flux RSS que je récupère présente des éléments XML <item>. J'utilise une variable XSL pour compter les items et permettre d'associer à chaqu'un de ces items un numéro unique. Ce numéro permet de générer une ancre HTML unique que je place sur le titre de la nouvelle contenue dans l'item. Je génère de la même façon un lien pointant vers cette ancre (via son numéro unique) dans le titre du bloc menu "Nouvelles de cette page".

Moins de bla bla et concrètement cela donne pour l'ancre à placer au niveau du titre dans l'item de la feuille de transformation XSL :

<xsl:template match="item">
  (...)
  <xsl:variable name="number">
    <xsl:number count="item" />
  </xsl:variable>
  <h2><a name="{$number}"><xsl:value-of select="title"/></a></h2>
  (...)
</xsl:template>

et dans cette même feuille de style, pour les liens dans le bloc menu "Nouvelles de cette page":

<!-- print toc -->
<xsl:template name="toc">
  <xsl:for-each select="item">
    <xsl:variable name="number">
      <xsl:number count="item" />
    </xsl:variable>
    <li><a href="#{$number}"><xsl:value-of select="title"/></a></li>
  </xsl:for-each>
</xsl:template>

Envoyer un commentaire

Commentaire et infos