Accueil

Exemples XSLT

Afficher plein écran
Emmanuel Lazinier
Création de la page : 1999-12-08

Nettoyer un tableau HTML (MSIE5 "natif")

Le tableau suivant, tiré d'un exemple réel, a été réalisé de manière peu orthodoxe. Des colonnes vides ont été ajoutés dans le seul but d'indenter certains en-têtes de ligne. Des largeurs de cellule ont été programmées "en dur". Le résultat n'est guère satisfaisant.
 
Article  Dépose/repose  Réparation  Mise au rebut 
IPCS  sans objet  utilisateur  sans objet 
Module de commande  utilisateur  unité  dépôt 
Clavier  unité  mise au rebut   équipe de contact 
Module d'interface  unité  équipe de contact  dépôt 
Ensemble d'affichage  équipe de contact  dépôt  sans objet 
Affichage  dépôt  dépôt  dépôt 
Armoire  dépôt  dépôt  dépôt 
CCA  dépôt  constructeur  sans objet 
CPU  unité  équipe de contact  dépôt 
Alimentation  équipe de contact  mise au rebut  équipe de contact 
Commande CCA  équipe de contact  dépôt  dépôt 
Mémoire CCA  équipe de contact  mise au rebut   dépôt 
Antenne équipée  sans objet  sans objet  sans objet 
Antenne  utilisateur  sans objet User 
Câble équipé  utilisateur  équipe de contact  équipe de contact 
Alim équipée  sans objet  utilisateur  sans objet 
Batterie équipée  utilisateur  sans objet  dépôt 
Câble équipé  utilisateur  équipe de contact  dépôt 
Convertisseur CA/CC  utilisateur  mise au rebut  équipe de contact 
Nous nous proposons de "nettoyer" ce tableau à l'aide du moteur XSLT de MSIE5.

Notre feuille de style MSXSL va supprimer les colonnes vides et ajouter aux cellules de la (nouvelle) première colonne un attribut CLASS de valeur R0, R1 ou R2 selon le degré d'indentation voulu. Ces attributs pourront ensuite être traduits en indentations (et si l'on veut en couleurs) par des directives de style CSS. Les cellules de la première ligne et de la (nouvelle) première colonne seront transformées en éléments <TH> au lieu de <TR>. L'italique et le gras des cellules "normales" seront supprimés.

En mettant au point cette feuille de style MSXSL, nous avons été surpris de constater que les index qui caractérisent la position d'un élément parmi ses siblings (= sa position dans  l'ensemble des éléments enfants du même élément parent) commencent tantôt à zero et tantôt à un, selon une logique qui nous échappe. S'agirait-il d'un bogue du moteur XSLT de MSIE5 ?

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<!-- Feuille de style pour épurer un tableau -->

<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>

<!-- Reproduit tous les noeuds du document -->
<xsl:template match="@* | * | text()">
<xsl:copy>
<xsl:apply-templates select="@* | * | text()"/></xsl:copy>
</xsl:template>

<xsl:template match="HEAD">
TH {
color: #0050B2;
}
.R0 {
text-align: left;
padding-left: 0.5em;
}
.R1 {
text-align: left;
color:green;
padding-left: 2em;
}
.R2 {
text-align: left;
color: red;
padding-left: 3em;}
</STYLE>
</HEAD>
</xsl:template>
 

<!-- supprimer les EM et les STRONG -->
<xsl:template match="EM">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="STRONG">
<xsl:apply-templates />
</xsl:template>

<!-- supprimer les retraits par cases vides et remplacer par des classes -->
<!-- transformer les TR des 1re ligne et 1re colonne en TH -->
<xsl:template match="TD">
<xsl:choose>
<xsl:when test="../../context(-2)[1]">
<!-- 1re ligne : transformer les TR en TH -->

</xsl:when>
<xsl:otherwise> </xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>
 

Et voici le tableau résultat. N'est-il pas beaucoup plus beau !
(Utilisateurs de Netscape 4, il se peut que votre butineur éprouve quelques réticences à afficher les identations. Désolés.)
 
Article  Dépose/repose  Réparation  Mise au rebut 
IPCS  sans objet  utilisateur  sans objet 
Module de commande  utilisateur  unité  dépôt 
Clavier  unité  mise au rebut   équipe de contact 
Module d'interface  unité  équipe de contact  dépôt 
Ensemble d'affichage  équipe de contact  dépôt  sans objet 
Affichage  dépôt  dépôt  dépôt 
Armoire  dépôt  dépôt  dépôt 
CCA  dépôt  constructeur  sans objet 
CPU  unité  équipe de contact  dépôt 
Alimentation  équipe de contact  mise au rebut  équipe de contact 
Commande CCA  équipe de contact  dépôt  dépôt 
Mémoire CCA  équipe de contact  mise au rebut   dépôt 
Antenne équipée  sans objet  sans objet  sans objet 
Antenne  utilisateur  sans objet User 
Câble équipé  utilisateur  équipe de contact  équipe de contact 
Alim équipée  sans objet  utilisateur  sans objet 
Batterie équipée  utilisateur  sans objet  dépôt 
Câble équipé  utilisateur  équipe de contact  dépôt 
Convertisseur CA/CC  utilisateur  mise au rebut  équipe de contact 
 
Voir/Télécharger les fichiers de l'exemple :


Contribuez ! Faites-nous profiter de vos exemples les plus significatifs.

Retour à la page d'accueil.