Easy-Micro

ESPACEMEMBRE XSL
Trier et Filtrer

Trier et filtrer des données XML

XSL Trier des données XML avec le XSLT

Pour le trie, on utilise la balise "xsl:for-each" associée à la balise "xsl:sort"

Voici le fichier XSLT, "macompile-trie.xsl", à recopier et à tester sur le fichier XML "macompile-trie.xml"
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output
method="html"
encoding="ISO-8859-1"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system="http://www.w3.org/TR/html4/strict.dtd"
indent="yes" />

<xsl:template match="/">
<html><body>
<table border="1" cellspacing="0" cellpadding="3">
<tr bgcolor="#ffffcc">
  <td>Titre</td>
  <td>Artiste</td>
</tr>

<xsl:for-each select="macompile/mp3">
<xsl:sort select="artiste" order="ascending"/>

<tr>
<td><xsl:value-of select="titre"/></td>
<td><xsl:value-of select="artiste"/></td>
</tr>

</xsl:for-each>

</table>
</body></html>
</xsl:template>

</xsl:stylesheet>

Notes:
- Remarquez la place inabituelle de la balise "xsl:for-each" entre les balises HTML "tr"
- L'attribut order de la balise "xsl:sort" accepte descending ou ascending.
- Pour un tri sur des nombres, on rajoute: data-type="number" comme ceci:
<xsl:sort select="." data-type="number" />

Attributs et paramètres de la balise "xsl:sort" :
<xsl:sort
select="expression"
lang="language-code"
data-type="text|number|qname"
order="ascending|descending"
case-order="upper-first|lower-first"/>

XSL Filtrer des données XML avec le XSLT
On utilise l'attribut select="chemin[balise='nom']" de la balise xsl:for-each.
Le filtre est ici utilisé avec le signe égale ([balise='nom']), mais on peut utiliser le signe différent de (!=) ou plus grand que (&gt;) ou plus petit que (&lt;).
Voici la balise complète: <xsl:for-each select="macompile/mp3[artiste='Rita Mitsouko']">

Exercice : Afficher tous les artistes sauf Carla Bruni.

Sort dans un Apply-templates
Il faut diviser la balise orpheline <xsl:apply-templates /> en deux balises ouvrante et fermante et insérer entre ces deux balises un xsl:sort. Le select="mp3" de la balise <xsl:apply-templates est ici facultative et permet de ne triller QUE les mp3 dans le cas ou il y en aurrait d'autre.

<xsl:apply-templates select="mp3">
<xsl:sort select="artiste" />
</xsl:apply-templates>


< Page précédente XSL Page suivante >