UP PREVIOUS NEXT   Technologies Internet et Education, © TECFA
  4. Eléments de programmation

4. Eléments de programmation

4.1 Traitement conditionnel par xsl:if

Syntaxe:

<xsl:if test = "boolean-expression">

<!-- Content: template -->

</xsl:if>

Exemple 4-1: xsl:if exemple pour insérer des virgules dans une liste

<example>
 <list>
  <element>element A</element>  <element>element B</element>
  <element>element C</element>  <element>element D</element>
  <element>element E</element>
 </list>
 <list>
  <element>element AA</element> <element>element BB</element> 
  ... 
</element>
 </list>

Résultat affiché:

Liste: element A, element B, element C, element D, element E.
Liste: element AA, element BB, element CC, . 

Feuille de style

 <xsl:template match="example">
  <html><title> <xsl:value-of select="title"/></title>
   <body> <xsl:apply-templates/> </body>
  </html>
 </xsl:template>
 
 <xsl:template match="list">
  Liste:
  <xsl:apply-templates/>.
  <br/>
 </xsl:template>
  
 <xsl:template match="element">
  <xsl:apply-templates/>
  <xsl:if test="position()!=last()"> <xsl:text>, </xsl:text> </xsl:if>
 </xsl:template>

Problème:

  • Différence de modèle de traitement entre Microsoft et autres engins XSLT
  • Le dernier élément vide "reçoit" aussi une virgule dans Firefox par exemple
  • Solution: Soit serrer" les balises, soit virer les "whitespaces"
  • Cf. 5.1 "Génération conditionnelle de texte" [17]

4.2 Traitement conditionnel avec xsl:choose

Syntaxe:

 

<xsl:choose>

<!-- Content: (xsl:when+, xsl:otherwise?) -->

</xsl:choose>

 

<xsl:when

test = boolean-expression>

<!-- Content: template -->

</xsl:when>

 

<xsl:otherwise>

<!-- Content: template -->

</xsl:otherwise>

 

Cette définition dit:

  • on peut avoir plusieurs clauses avec un test (xsl:when).
  • la première vraie est utilisée
    • donc la série des xsl:when correspond à "if ( ) { ...}" elseif ( ) { ...}" elseif ( ) { ...}" de PHP
  • Si aucune clause n'est vraie et s'il existe une clause xsl:otherwise, c'est cette dernière qui est exécutée
    • il s'agit donc du "else {..}"

 

Exemple 4-2: Couleurs pour animaux colorés

Le XML:

<example>
 <title>Simple XSLT example that will show how to deal with animal eyes
 </title>
 <list>
  <animal couleur="noir">Panthère</animal>
  <animal couleur="compliquée avec des tâches">Panthère</animal>
  <animal couleur="blanc">Ours polaire</animal>
  <animal couleur="vert">Grenouille</animal>
  <animal>Vache</animal>
 </list>
  • Chaque animal sera listé
  • La couleur du texte pour certains animaux sera celle de sa couleur

 

Le XSLT:

 <xsl:template match="list">
  Liste d'animaux:
  <ul>   <xsl:apply-templates/>    </ul>
 </xsl:template>
 
<xsl:template match="animal">
  <li>
  <xsl:choose>
    <xsl:when test="@couleur='noir'">
      <p style="color:black;font-weight:bold">
        <xsl:value-of select="."/>
      </p>
    </xsl:when>
    <xsl:when test="@couleur='vert'">
      <p style="color:green">
        <xsl:value-of select="."/>
      </p>
    </xsl:when>
    <xsl:otherwise>
      <p style="color:blue">
        <xsl:value-of select="."/>
      </p>
    </xsl:otherwise>
  </xsl:choose>
  </li>
</xsl:template>

4.3 Boucles xsl:for-each

Exemple 4-3: Présentation du résultat XML d'une sortie SQL typique avec XSLT

Extrait du fichier XML

<ROWSET>
   <ROW>
    <id>1</id>
    <login>test</login>
    <fullname>Joe Test </fullname>
    <url>http://tecfa.unige.ch/</url>
    <food>3</food>
    <work>4</work>
    <love>5</love>
    <leisure>2</leisure>
   </ROW>
 
   <ROW>
     .....
   </ROW>
   ....
</ROWSET>
 
 
 

Extrait du fichier XSLT

 
<xsl:template match="ROWSET">
    <table border="2" cellspacing="1" cellpadding="6">
    <tr><th>id</th>
        <th>Login</th>
        <th>Full Name</th>
        <th>URL</th>
        <th>food</th><th>work</th><th>love</th><th>leisure</th>
     </tr>
    <xsl:for-each select="ROW">
     <tr>
      <td><xsl:value-of select="id"/></td>
      <td><xsl:value-of select="login"/></td>
      <td><xsl:value-of select="fullname"/></td>
        <td bgcolor="tan"><a href="{url}"><xsl:value-of select="url"/></a></td>
      <td><xsl:value-of select="food"/></td>
      <td><xsl:value-of select="work"/></td>
      <td><xsl:value-of select="love"/></td>
      <td><xsl:value-of select="leisure"/></td>
      </tr> 
     </xsl:for-each>
    </table>	
</xsl:template>
  • xsl:for-each select="ROW"
    • extrait pour chaque "ligne" de la sortie SQL (ROW) les valeurs qui nous intéressent
    • met des balises "<tr>" au début à la fin d'un passage
    • met des balises "<td>

UP PREVIOUS NEXT -- TIE