PREVIOUS UP   Technologies Internet et Education, © TECFA
  6. Exécution de templates et appels

6. Exécution de templates et appels

6.1 Le template (règle modèle)

Syntaxe:

<!--Catégorie : élément de haut niveau -->

<xsl:template

match = "expression XPath"

name = "Nom"

priority = "nombre"

mode = "nom">

<!-- Contenu : (xsl:param*, template)-->

</xsl:template>

Attribut match

Attribut name

Attribut priority

Attribut mode

Les paramètres xsl:param

Le template

6.2 Variables et paramètres

Les paramètres

Syntaxe

<!-- Category: top-level-element -->

<xsl:param

name = qname

select = expression>

<!-- Content: template -->

</xsl:param>

<!-- space est un paramètre global -->

<xsl:param name="space" select="10"/>

<xsl:template name="render-course">

<xsl:param name="position-y"/>

<text x="{$space}" y="{$position-y * $increase-y - $space }"

style="stroke:#000099;fill:#000099;font-size:12;">

<xsl:value-of select="title"/>

</text>

 

Les variables

Syntaxe

<!-- Category: instruction -->

<xsl:variable

name = qname

select = expression>

<!-- Content: template -->

</xsl:variable>

Utilisation de paramètres et variables

$XYZ

<xsl:param name="initial_size" select="5"/>
<xsl:param name="multiplier" select="3"/>
 
<xsl:variable name="fonte" select="$initial_size + $position * $multiplier"/>
<p style="font-size: {$fonte}pt ;"> blabla </p>
 

6.3 Appel d'un template (règle modèle)

Syntaxe

<!--Catégorie : instruction -->

<xsl:call-template

name = qname>

<!-- Contenu : xsl:with-param*-->

</xsl:call-template>

Exemple 6-1: XSLT avec des fonctions

Un fragment du XML

<news>
 <item>
   <title>Home Page de Daniel Schneider</title>
   <link>http://tecfa.unige.ch/tecfa-people/schneider.html</link>
    <description>Cette page renvoie à mes publications, ....</description>
  </item>
  <item>
   <title>Matériaux de cours de Daniel Schneider</title>
   <link>http://tecfa.unige.ch/guides/tie/tie.html</link>
   <description>Il s'agit de plusieurs centaines de transparents ... </description>
  </item>
  ....  </news>

La feuille de style

<xsl:output method="html"

encoding="ISO-8859-1"

doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"/>

 

<xsl:template match="/">

<html>

<head><title>Demo call-templates</title></head>

<body bgcolor="#FFFFFF">

<h1>Demo call-templates</h1>

<xsl:apply-templates/>

</body>

</html>

</xsl:template>

  • Ce template appelé par le mécanisme d'application de règles contient une boucle qui, pour chaque enfant "item", fait explicitement appel au template "display_item"
  • Lors de cet appel on transmet
    • le contexte (donc "item" courant)
    • plus un paramètre "position" qui prend la valeur de la position du "item" en question

<xsl:template match="news">

< xsl:for-each select="item" >

<xsl:call-template name="display_item">

<xsl:with-param name="position" select="position()"/>

</xsl:call-template>

</xsl:for-each>

</xsl:template>

 

  • Ce template appelé (par call-template) reçoit un paramètre "position".
  • On utilisera ce paramètre pour définir la taille de la police (font) pour le titre
  • Donc:
    • <xsl:param name="position"/> définit un paramètre que ce template peut recevoir lorsqu'on l'appelle
    • $position utilise ce paramètre

 

<xsl:template name="display_item">

<xsl:param name="position"/>

<p style="font-size: {5 + $position * 5}pt ;">
<a href="{link}"> <xsl:value-of select="title"/></a></p>

<p><xsl:value-of select="description"/></p>

</xsl:template>

 

</xsl:stylesheet>

Exemple 6-2: XSLT avec des fonctions 2

 
<!-- you can change the value of these 2 parameters -->
 <xsl:param name="initial_size" select="5"/>
 <xsl:param name="multiplier" select="3"/>
  
 <xsl:template name="display_item">
  <xsl:param name="position"/>
  <xsl:variable name="fonte
" select="$initial_size + $position * $multiplier
"/>
  <p style="font-size: {$fonte
}pt ;"><a href="{link}"><xsl:value-of select="title"/></a><br />
   [Pos = <xsl:value-of select="$position"/>, Multip. = <xsl:value-of select="$multiplier"/>,
   Taille init. = <xsl:value-of select="$initial_size"/>, Taille fonte = <xsl:value-of select="$fonte"/>]
  </p>
  <p><xsl:value-of select="description"/></p>
 </xsl:template>

PREVIOUS UP -- TIE