UP PREVIOUS NEXT   Technologies Internet et Education, © TECFA
  5. Exemples simples

5. Exemples simples

5.1 Génération conditionnelle de texte

Exemple 5-1: Insertion de virgules dans une liste à longueur variable

Le problème:

Première opération: gérer les éléments de type "text node" vide

  • problème: pour les processeurs XPath/XSLT les espaces, retours de lignes, tabs etc. situés autour des éléments sont aussi des noeuds qu'il va compter. La solution simple consiste à éliminer ces espaces:
  
<list><!-- ici va se mettre un noeud (node) vide -->
  <element>element AA</element> <!-- ici un node vide ... -->
  <element>element BB</element>
  <element>element CC</element><!-- ici un node vide ... -->
 </list>
Donc:
<xsl:strip-space elements="list"/>
 

Insérer les virgules avec un test:

Voir les fichiers simple-list.xml et simple-list.xsl

 

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

Résultat affiché

 Liste: element AA [pos=1] , element BB [pos=2] , element CC [pos=3] . 

Même opération lorsque les "enfants" sont des éléments différents:

Voir les fichiers reference-entry.xml et reference-entry.xsl

 <xsl:template match="ref">
  <xsl:apply-templates select="author|ref|title|edition|publisher|pubPlace|publicationYear"/>.
 </xsl:template>
  
 <xsl:template match="author|edition|publisher|pubPlace|publicationYear">
  <xsl:apply-templates/>
  <xsl:if test="position() !=last()">, </xsl:if>
 </xsl:template>

5.2 Fabrication de références (liens)

Exemple 5-2: Table des matières pour éléments qui ont un identificateur

Fragment XSLT (pour faire les liens au départ, voir: mode="toc")

<xsl:template match="/">
  <html>
   <body bgcolor="#FFFFFF">
     <h1><xsl:value-of select="/RECIT/Titre"/></h1>
     <p> Highlights de l'histoire:
         <xsl:apply-templates select="//EPISODE" mode="toc"/> </p>
     <xsl:apply-templates/>
   </body>
 </html>
</xsl:template>

Fragments XSLT (pour gérér la balise "EPISODE")

<xsl:template match="EPISODE" mode="toc"
>
  <a href="#{@id}">
<xsl:value-of select="SousBut"/></a> - 
</xsl:template>
 
<xsl:template match="/RECIT/FIL/EPISODE">
  <a name="{@id}"
> <hr /> </a>      
  <xsl:apply-templates/>
</xsl:template>

Exemple 5-3: Tables des matières pour éléments sans ID

Fragments XSLT

 
<!-- Code qui fabrique la table des matières (jours) en HTML -->
Programme: <xsl:apply-templates select="//day" mode="toc"
 />
 
<xsl:template match="day" mode="toc">
  <a href="#{@name}{@dayno}{@month}"
><xsl:value-of select="@name"/></a> - 
</xsl:template>
<!-- Code pour insérer des attributs "name" dans le HTML -->
<xsl:template match="day">
   <a name="{@name}{@dayno}{@month}"
><xsl:value-of select="@name"/></a> -          <xsl:value-of select="@dayno"/>/<xsl:value-of select="@month"/>/
   <xsl:value-of select="@year"/>
</xsl:template>
 

Fragment XML (élément à extraire)

  • Faire une table des matières avec les jours de l'Atelier (avec liens)
<day name="lundi" year="2003" month="6" dayno="16">

Résultat HTML

  • Au début du fichier on a un menu qui affiche les jours (liens vers le bas)
Programme: <a href="#lundi166">lundi</a> - <a href="#mardi176">mardi</a> - ....
......
  • Dans le fichier on insère les attributs "name"
<a name="lundi166">lundi</a> - 16/6/2003

Note:

  • Dans ce répertoire il y a aussi un fichier programme-fo.xsl qui génère du code xsl-fo utilisé pour générer la version PDF du programme.

Exemple 5-4: Tables de matières pour éléments sans ID

5.3 Numérotations

Exemple 5-5: Numérotation d'éléments

Variante 1:

<xsl:template match="sections">
  <xsl:for-each select="section">
   <p>
    <xsl:number value="position()" format="a. "/>
    (<xsl:value-of select="deposit-date"/>) <a href="{url}"><xsl:value-of select="title"/></a>
    .........
   </p>
  </xsl:for-each>	
 </xsl:template>

Variante 2:

<xsl:template match="sections">
  <xsl:for-each select="section">
....
   <xsl:number level="multiple"
               count="exercise|section"
               format="1.1 "/>
....

UP PREVIOUS NEXT -- TIE