Introduction à XML - Université de Genève, CUI ©

Groupe VP-GL=>Cours en-ligne=>Introduction à XML=>Plan du cours=>Récapitulation...XSLT

Récapitulation (partielle) des éléments de base de la syntaxe XSLT

Une feuille de style XSL est un document XML dont l'élément racine est xsl:stylesheet
Règles "chablon"

<xsl:template match="Critère">
...
</xsl:template>

stipule ce qui doit être produit en sortie pour tout élément du document XML qui correspondrait au critère indiqué par l'attribut match. Ce qui se trouve entre la balise d'ouverture et la balise de fermeture de l'élément xsl:template servira à produire la sortie correspondant l'élément XML qui aura satisfait au critère indiqué.

Le critère peut être plus ou moins précis et correspond à un sous-ensemble de la spécification XPath.

Si l'élément auquel s'applique ce chablon contient des sous-éléments qui doivent eux aussi être traités, il faudra imbriquer une règle xsl:apply-templates à l'intérieur de l'élément xsl:template.

<xsl:apply-templates /> stipule que toutes les règles portant sur des sous-éléments de l'élément courant doivent être appliquées.
<xsl:apply-templates select="Critère" /> stipule que, parmi les règles portant sur des sous-éléments de l'élément courant, seules doivent être appliquées celles qui portent sur les sous-éléments correspondants au critère indiqué.
<xsl:for-each select="Critère">
  ...
</xsl:for-each>
permet une itération sur tous les éléments satisfaisant le critère indiqué. Le contenu de l'élément xsl:for-each doit stipuler ce qui doit être produit pour chaque occurrence d'éléments sélectionnés.
<xsl:value-of select="Critère" /> produit en sortie le contenu de l'élément stipulé par le critére. Si l'attribut select est omis, c'est l'élément courant qui est utilisé. xsl:value-of  est généralement utilisé quand le contenu de l'élément sélectionné est du texte simple.
<xsl:copy>
  ...
</xsl:copy>
produit en sortie un élément de nom identique à l'élément courant, mais sans y mettre encore de contenu ou d'attributs. Le contenu de l'élément xsl:copy doit donc stipuler comment le contenu de l'élément de sortie doit être "rempli". Cela sera typiquement fait avec <xsl:apply-templates />

Cet élément est pratique à utiliser quand on utilise dans le document XML des éléments dont le nom correspond à des balises HTML.

<xsl:if test="ExpressionBooléenne">
...
</xsl:if>
exécute les règles imbriquées dans l'élément xsl:if uniquement si l'expression booléenne fournie est évaluée à vrai.
<xsl:choose>
  <xsl:when test="ExpressionBooléenne">
  ...
  </xsl:when>
  <xsl:when test="ExpressionBooléenne">
  ...
  </xsl:when>
  <xsl:otherwise>
  ...
  </xsl:otherwise>
</xsl:choose>
fonctionne d'une manière similaire au xsl:if, mais permet de tester plusieures conditions et de prévoir une alternative quand toutes les conditions échouent.
<xsl:element name="NomElementSortie">
  ...
</xsl:element>
produit en sortie un élément du nom indiqué par l'attribut name. Des éléments xsl:attribute peuvent être imbriqués pour ajouter des attributs à l'élément produit en sortie.
<xsl:attribute name="NomAttribut">
  ...
</xsl:attribute>
produit en sortie un attribut qui sera inséré dans l'élément de sortie courant. Le contenu de l'élément xsl:attribute servira à définir la valeur que prendra l'attribut produit en sortie.

Un contenu typique de l'élément xsl:attribute est <xsl:value-of />

Eléments de résultat litéraux:

<NomElement NomAttribut="{UneExpression}">
  ...
</NomElement>

produit en sortie un élément du nom indiqué avec un attribut dont la valeur sera le résultat de l'expression fournie. Le contenu de l'élément d'entrée servira à définir le contenu de l'élément de sortie.

Cette notation correspond à un raccourci d'écriture. Elle est équivalente à:

<xsl:element name="NomElement">
  <xsl:attribute name="NomAttribut">
    <xsl:value-of select="UneExpression" />
  </xsl:attribute>
  ...
</xsl:element>

Dans cet exemple, UneExpression peut être par exemple le nom d'un sous-élément de l'élément courant ou le signe @ suivi du nom d'un attribut de l'élément courant.

<xsl:sort select="Critère" order=...> généralement imbriqué dans un xsl:apply-templates ou un xsl:for-each, trie les éléments concernés avant de les traiter, plutôt que de les traiter dans l'ordre d'apparition dans le document XML.

L'attribut order doit valoir "ascending" ou "descending"

Critères

. correspond à l'élément courant.
NomDElement (p.ex. article) correspond à tout élément ayant le nom en question, qui serait contenu dans l'élément courant. (équivalent à ./NomDElement)
* correspond à n'importe quel élément (joker) contenu dans l'élément courant.
Nom1 | Nom2 correspond à tout élément dont le nom est soit Nom1, soit Nom2, contenu dans l'élément courant.
Nom1 / Nom2 correspond à tout élément Nom2 qui serait directement inclus dans un élément Nom1, lequel est contenu dans l'élément courant.
Nom1 // Nom2 correspond à tout élément Nom2 qui serait, directement ou indirectement, inclus dans un élément Nom1, lequel est contenu dans l'élément courant. D'une manière similaire, .//Nom2 correspond à tout élément Nom2 qui serait, directement ou indirectement, inclus dans l'élément courant.
/ correspond à la racine de l'arbre XML. En combinant ceci avec les notations précédentes, on obtient un chemin absolu depuis la racine du document. Ainsi, /Nom1/Nom2 indique tout élément Nom2 qui se trouve directement contenu dans l'élément racine Nom1 et //Nom1 indique tout élément Nom1 qui serait descendant de la racine.
text() correspond à n'importe quel noeud de l'arbre XML qui ne contiendrait que du texte simple.
node() correspond à n'importe quel noeud de l'arbre XML, à l'exception de la racine.
id("UnIdentificateur") correspond à l'élément (normalement unique) qui a un attribut ID="UnIdentificateur".
NomDElement[UneExpression] correspond à tout élément ayant le nom en question et qui satisferait l'expression. Exemples d'expressions:
i
ou
position()=i
i est un nombre
le i-ème descendant direct d'un même parent et ayant le nom indiqué.
last()=i
i est un nombre
le i-ème et dernier descendant direct d'un même parent.
position()>i tout élément qui est précédé d'au moins i éléments de même nom comme descendants du même "parent".
position() mod 2 = 1 tout élément qui est un descendant impair.
SousElement tout élément qui a un descendant direct du nom du sous-élément indiqué.
SousElement="Valeur" tout élément qui a un descendant direct du nom du sous-élément indiqué dont le contenu serait la valeur indiquée.
@NomDAttribut tout élément qui a un attribut du nom indiqué.
@NomDAttribut= "Valeur" tout élément qui a un attribut du nom indiqué dont la valeur serait la valeur indiquée.

Ces différentes notations peuvent être combinées. Par exemple:

/article/texte//lien[last()]
correspond au dernier élément lien qui aurait pour ancêtre un élément texte, lequel aurait comme parent un élément article;
/listeCD//piste[num="1"]/titre
correspond aux titres des pistes ayant le numéro 1 de tous les CDs de la liste (dans cet exemple, on aurait pu simplifier en ne mettant que
//piste[num="1"]/titre
vu que listeCD est l'élément racine qui contient la totalité du document XML);
//piste[contains(string(titre),"symphony")]
correspond à toutes les pistes dont le titre contient le mot symphony;
//*[@lieu="Paris"]
correspond à tout élément, quel que soit son niveau hiérarchique dans le document XML et qui aurait un attribut lieu dont la valeur est "Paris".



Bertrand Ibrahim     

Dernière modification 16.05.01

Site Hosting: Bronco