TUTORIELS 
Transformer du XML en HTML avec XSLT

Page 1 | 2 | 3

Un exercice pratique permettant de découvrir plus en profondeur les possibilités de transformations offertes par XSL, en créant un tableau HTML à partir de données XML.
 (28 avril 2003)
 

Résolution
L'une des premières choses à remarquer est la modification de l'ordre des entrées.
En XML:

    <colonne nom="col1">
      <entree>entrée col1_1</entree>
      <entree>entrée col1_2</entree>
      <entree>entrée col1_3</entree>
    </colonne>

En HTML, du fait de la manière dont sont construits les tableaux:

  <tr>
    <td>entrée col1_1</td>
    <td>entrée col2_1</td>
    <td>entrée col3_1</td>
  </tr>

Autre aspect très important: le nombre d'entrées n'est pas égal dans chaque colonne, ce qui oblige, en HTML, à créer des entrées vides (ou, plus précisément, avec un espace, Netscape - par exemple - n'appréciant pas vraiment les cellules vides).

Voici notre document XSLT, suivi de nos explications:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="doc">
    <table>
      <tr>
        <xsl:apply-templates select="colonne"/>
      </tr>
      <xsl:call-template name="compteur">
        <xsl:with-param name="N" select="1"/>
      </xsl:call-template>
    </table>
  </xsl:template>

Ce template principal fait appel à la fonction suivante:

  <xsl:template name="compteur">
    <xsl:param name="N" />
    <xsl:if test="colonne/entree[ $N ]">
      <tr>
        <xsl:for-each select="colonne">
          <td>
            <xsl:apply-templates select="entree[ $N ]"/>
            <xsl:text> </xsl:text>
          </td>
        </xsl:for-each>
      </tr>
      <xsl:call-template name="compteur">
        <xsl:with-param name="N" select="$N + 1"/>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>

Ainsi qu'à cette fonction qui produit les en-têtes de colonnes:

  <xsl:template match="colonne">
  
  <th>
  
    <xsl:value-of select="@nom"/>
  
  </th>
  </xsl:template>
</xsl:stylesheet>

Le tout se trouve dans un seul et même fichier XSL.


Page 1 | 2 | 3

 

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page