|
XSLT : structures de contrôle |
Conditionnelle
|
|
<xsl:if test="expression booléenne XPath">
instructions
</xsl:if> |
- Si condition1alors
instruction1
sinon si condition2
alors instruction2
...
sinon instruction
par défaut
Le processeur évalue dans l'odre les conditions et instancie
un bloc d'instruction dès qu'une condition est vraie. Si
les conditions ne sont pas exclusives (si plusieurs conditions
sont vraies), seul le bloc correspondant à la première
condition vérifiée est instancié.
Dans le cas où toutes les conditions sont fausses et qu'un
élément otherwise
(facultatif) est présent, le bloc d'instructions correspondant
est instancié.
|
|
<xsl:choose> <xsl:when test="expr_bool1">
instr1
</xsl:when> <xsl:when test="expr_bool2">
instr2
</xsl:when> ...
<xsl:otherwise> instr_defaut
</xsl:otherwise> </xsl:choose>
|
Boucle
- Pour tout élément
tel que (expression
XPath) faire instructions
Cette structure crée la liste des éléments
qui satisfont certaines conditions (exprimées dans l'expression
XPath) et instancie le bloc d'instruction en faisant en sorte
qu'un nouvel élément de la liste devienne l'élément
courant à chaque itération.
|
|
<xsl:for-each test="expression XPath">
instructions
</xsl:for-each> |
- Tri
La liste des éléments créée par une
instruction for-each peut être
triée.
Dans la syntaxe ci-contre, l'attribut select
spécifie sur quel élément doit porter le
tri (souvent un élément fils, mais pas nécessairement).
Cet attribut est facultatif, de même que l'arttibut order
qui indique si le tri doit être croissant ou décroissant.
Une même instruction for-each
peut comporter plusieurs instructions sort.
|
|
<xsl:for-each test="expression XPath">
<xsl:sort select="xpath" order="ascending|descending"/>
instructions
</xsl:for-each> |
Exemples
- Choix multiple : voir l'exemple "génération
de HTML"
- Itération et tri :
XML |
|
XSL |
<liste-seminaires> <seminaire>
<desc>
<titre>Communauté,
un terme polémique ?</titre> <salle>D31</salle>
</desc>
<date>
<jour>06</jour>
<mois>01</mois>
</date>
</seminaire> <seminaire>
<desc>
<titre>Théorie
Sens-Texte. La base de données DiCo</titre>
<salle>D30</salle>
</desc>
<date>
<jour>25</jour>
<mois>02</mois>
</date>
</seminaire> <seminaire>
<desc> <titre>Structuration
XML pour la fouille de données textuelles</titre>
<salle>D155</salle>
</desc>
<date>
<jour>07</jour>
<mois>04</mois>
</date>
</seminaire> </liste-seminaires> |
|
<xsl:template match="/">
<xsl:for-each select="//titre">
<xsl:sort select="../../date/mois"
order="descending"/> <xsl:sort select="../../date/jour" order="descending"/>
<xsl:apply-templates
select="../../date"/>
:
<xsl:value-of
select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
<xsl:template match="date">
<xsl:value-of select="jour"/>/<xsl:value-of select="mois"/>
</xsl:template> |
Résultat |
|
|
07/04 :
Structuration XML pour la fouille de données textuelles
25/02 : Théorie Sens-Texte. La base de données
DiCo
06/01 : Communauté, un terme polémique ? |
Remarque : en présence
de plusieurs instructions sort,
l'ordre dans lequel elles apparaîssent est important. Dans
l'exemple ci-dessus, si les deux éléments sort
avaient été inversés, les séminaires
auraient été triés d'abord par jour, puis
par mois. |
|
|