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"> |
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}"> |
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"> 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:
|
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".
- XSL Transformations (XSLT)
- XML Path Language (XPath)