English | >> Français << | Deutsch | Magyar | 中文 | Polski ZVON > Tutorials > XSLT Tutorial
>> Contenu << | Index des éléments

Introduction

Page 1 Le langage XSL vous permet de modifier librement n'importe quel texte source. Cette feuille de style et Cette feuille de style génèrent deux sorties différentes à partir du même fichier source.
Page 2 Chaque feuille de style XSL doit commencer par l'élément xsl:stylesheet. L'attribut version='1.0' précise la version de la spécification XSL(T). Cet exemple présente une feuille de style la plus simple possible. Comme elle ne comporte aucune information, le traitement par défaut est appliqué.
Page 3 Un processeur XSL analyse un fichier XML source et s'efforce de trouver une règle modèle concordante. S'il en trouve une, les instructions qu'elle contient sont évaluées.
Page 4 Le contenu des éléments du fichier source peut être extrait de deux manières différentes. Cette feuille de style utilise l'élément xsl:value-of. Dans ce cas, le contenu de l'élément est extrait sans qu'aucune autre forme de traitement ne lui soit appliqué. L'instruction xsl:apply-templates dans Cette feuille de style est différente. Le processeur XSL poursuit le traitement des éléments sélectionnés pour lesquels un modèle est défini.

Modèles

Page 5 Un processeur XSL analyse un fichier XML source et s'efforce de trouver une règle modèle concordante. S'il en trouve une, les instructions qu'elle contient sont évaluées.
Page 6 Les chemins de localisation servent à accéder aux parties d'un document XML auquel un modèle doit être appliqué. La syntaxe requise est précisée dans la spécification du langage XPath. Elle est très similaire à celle utilisée pour l'adressage des systèmes de fichiers ( Cette feuille de style ).
Page 7 Le traitement commence toujours par le modèle sélectionnant le noeud correspondant au motif match="/". Ce noeud est le noeud racine (le noeud dont le seul élément fils est l'élément document : dans notre cas, l'élément "source"). Un grand nombre de feuilles de style ne comportent pas cet élément de manière explicite. Lorsque ce modèle n'est pas explicitement indiqué, le modèle implicite est utilisé (il comporte une seule instruction ). Cette instruction signifie : traiter tous les noeuds fils du noeud courant, y compris les noeuds textuels. Comparez Cette feuille de style et Cette feuille de style . Lorsqu'il y a un modèle pour un noeud particulier, le traitement par défaut n'est pas appelé ( Cette feuille de style ). Si vous souhaitez inclure les descendants de ce noeud, vous devez appeler leur modèle de manière explicite ( Cette feuille de style ).
Page 8 Un modèle peut rechercher des concordances à partir d'une sélection de chemins de localisation, chaque chemin de localisation étant séparé des autres par le caractère "|" ( Cette feuille de style ). Le caractère générique "*" sélectionne toutes les possibilités. Comparez Cette feuille de style à Cette feuille de style .
Page 9 Une double barre oblique "//" est très courante dans les chemins de localisation. Lorsqu'elle est présente au début d'un chemin de localisation, elle signifie : sélectionner tous les noeuds du document du type spécifié ( Cette feuille de style ). Lorsqu'elle est utilisée au milieu d'un chemin de localisation, elle signifie : sélectionner tous les noeuds apparaissant dans le noeud sélectionné par la première partie du chemin de localisation ( Cette feuille de style ).
Page 10 Avec l'attribut mode, un élément peut être traité plusieurs fois pour générer un résultat différent à chaque fois. Dans Cette feuille de style , l'un des modes n'existe pas.
Page 11 Il arrive souvent que plusieurs modèles sélectionnent le même élément dans le fichier XML source. Il convient donc de décider lequel doit être utilisé. Cet ordre de priorité peut être spécifié à l'aide de l'attribut priority. Si ce dernier n'est pas présent, le calcul de la priorité s'effectue selon plusieurs règles. Cette feuille de style et Cette feuille de style diffèrent par la priorité de leurs modèles. Cette feuille de style montre l'action par défaut en l'absence de l'attribut priority. La priorité du modèle CCC est plus faible que celle de CCC/CCC, car il est moins précis. Comparez Cette feuille de style et Cette feuille de style . La priorité du modèle CCC est plus faible que CCC/CCC et AAA/CCC/CCC, mais ces deux derniers modèles ont la même priorité. Dans ce cas, un processeur XSLT peut signaler l'erreur. Toutefois, s'il ne signale pas d'erreur, il doit décider quelle est la dernière règle modèle dans la feuille de style parmi les règles modèle concordantes restantes. Dans Cette feuille de style , la règle modèle la moins précise "*" comporte une priorité inférieure à celle de la règle CCC. Le calcul des priorités s'échelonne de -0.5 à 0.5. La spécification XSLT fournit plus de précisions.

Attributs

Page 12 Les attributs sont accessibles de la même manière que les éléments. Notez la présence du caractère "@" devant les noms d'attributs.
Page 13 Les attributs peuvent être traités de la même manière que les éléments.
Page 14 Vous pouvez également sélectionner les éléments qui comportent ou ne comportent pas un attribut donné. Cette feuille de style inclut, tandis que Cette feuille de style exclut les éléments, si l'attribut spécifié est présent.

Axes

Page 15 Les axes jouent un rôle très important en XSLT. Pour plus de détails, reportez-vous à Référence XSLT. Comparez : l'axe enfant (child) ( Cette feuille de style ), l'axe descendant (descendant) ( Cette feuille de style ), l'axe parent (parent) ( Cette feuille de style ), l'axe ancêtre (ancestor) ( Cette feuille de style ), l'axe cible suivante (following-sibling) ( Cette feuille de style ), l'axe cible précédente (preceding-sibling) ( Cette feuille de style ), l'axe suivant (following) ( Cette feuille de style ), l'axe précédent (preceding) ( Cette feuille de style ), l'axe attribut (attribute) ( Cette feuille de style ), l'axe espace de noms (namespace) ( Cette feuille de style ), l'axe réflexif (self) ( Cette feuille de style ), l'axe descendant-ou-réflexif (descendant-or-self) ( Cette feuille de style ) et l'axe ancêtres-ou-réflexif (ancestor-or-self) ( Cette feuille de style ).
Page 16 Tous les axes sont utilisés dans cet exemple.
Page 17 L'axe child:: peut être omis d'une étape de localisation, car il constitue l'axe par défaut. L'axe attribute:: peut être abrégé en @. // est la forme abrégée de l'axe /descendant-or-self::, . de l'axe self:: et .. de l'axe parent::.

Répétition et tri

Page 18 L'instruction xsl:for-each comporte un modèle qui est appliqué à chaque noeud sélectionné à l'aide de l'attribut select.
Page 19 Les noeuds sélectionnés avec l'élément xsl:for-each ( Cette feuille de style et Cette feuille de style ) ou xsl:apply-templates ( Cette feuille de style ) peuvent être triés. L'ordre de tri détermine l'ordre des attributs. Cette feuille de style effectue un tri croissant, tandis que Cette feuille de style effectue un tri décroissant.
Page 20 Cette feuille de style effectue un tri textuel, tandis que Cette feuille de style effectue un tri numérique. Notez la différence importante. Dans l'alphabet, 2 vient après 1, de sorte que 2 apparaît après 10 en mode textuel.
Page 21 Cette feuille de style trie les lettres majuscules avant les lettres minuscules, tandis que Cette feuille de style trie les lettres minuscules avant les lettres majuscules.

Création d'éléments et d'attributs

Page 22 L'élément xsl:element génère des éléments lors du traitement. Cette feuille de style utilise cette caractéristique, tandis que Cette feuille de style arrive au même résultat, mais d'une manière différente et laborieuse.
Page 23 L'élément xsl:attribute génère des attributs lors du traitement. Il crée un attribut dans l'élément qui le porte.
Page 24 Les éléments XSL Copy et Copy-of servent à copier des noeuds. L'élément Copy ne copie que le noeud courant sans ses fils, ni les attributs, tandis que l'élément Copy-of copie tout.
Page 25 L'élément xsl:copy peut comporter un attribut use-attribute-sets. De cette manière, vous pouvez spécifier des attributs pour l'élément copié. Cette feuille de style ne fonctionne pas de la manière attendue (paramétrage de use-attribute-sets avec la fonction name()), car les expressions des attributs référençant des objets XSLT nommés ne sont pas évaluées.

Traitement conditionnel

Page 26 L'instruction xsl:if permet le traitement conditionnel. Cette feuille de style montre un cas typique d'utilisation de xsl:for-each en ajoutant une virgule entre plusieurs éléments (entry) d'une liste. Il arrive très fréquemment que vous ne souhaitez pas ajouter de texte après le dernier élément. L'instruction xsl-if est bien utile dans ce cas. ( Cette feuille de style )
Page 27 L'élément xsl:choose permet de sélectionner une possibilité parmi plusieurs.
Page 28 Voici comment savoir qu'un texte commence par un nombre.

Génération et formatage des nombres

Page 29 Cette feuille de style montre le comportement par défaut de l'élément xsl:number. La numérotation de chaque élément chapter dépend de la position de l'élément chapter. Chaque niveau de chapitre est numéroté de façon indépendante. L'affectation de la valeur Multiple à l'attribut Level dans Cette feuille de style autorise une numérotation plus naturelle.
Page 30 L'élément xsl:number insère des nombres formatés dans la sortie. Le format est indiqué à l'aide de l'attribut format. Cet attribut commence par un identificateur de format, suivi par des caractères séparateurs. Examinez chaque feuille de style pour comparer la numération.
Page 31 Cette feuille de style et Cette feuille de style constituent des exemples de formatage de nombres multiniveaux.

Variables

Page 32 Cette feuille de style et Cette feuille de style illustrent différentes manières de définir un élément xsl:variable, Cette feuille de style et Cette feuille de style de définir un élément xsl:param.
Page 33 Une feuille de style peut comporter plusieurs variables de même nom. Cette feuille de style montre comment récupérer la valeur d'une variable globale ayant le même nom qu'une variable locale. La Cette feuille de style , en revanche, est un exemple incorrect d'utilisation de plusieurs variables de même nom. La valeur de la variable locale est liée à l'élément xsl:when. Le reste du modèle ne voit donc que la variable globale.
Page 34 Vous pouvez passer des paramètres à un modèle avec l'élément xsl:with-param. Si le modèle comporte un élément xsl:param dont le nom est identique à l'attribut name de l'élément xsl:with-param, sa valeur est utilisée. Cette feuille de style montre un exemple type. Si vous voulez passer une variable, vous devez la définir avec l'élément xsl:param. La Cette feuille de style présente une approche incorrecte.
Page 35 Une variable peut contenir un fragment de l'arbre résultat. Les opérations autorisées sur un fragment de l'arbre résultat constituent un sous-ensemble de celles autorisées sur un ensemble de noeuds. Une opération est autorisée sur un fragment de l'arbre résultat seulement si elle l'est sur une chaîne (cette dernière peut d'abord impliquer la conversion de la chaîne en un nombre ou un booléen). En particulier, il est interdit d'utiliser les opérateurs /, // et [] sur les fragments. Lorsqu'une opération autorisée est effectuée sur un fragment de l'arbre résultat, elle est effectuée de la même manière que sur l'ensemble de noeuds équivalent. Comparez Cette feuille de style et Cette feuille de style .
Page 36 Il y a une différence importante dans la spécification des valeurs des variables.

Calculs numériques

Page 37 La fonction number() convertit son argument en un nombre. Cette feuille de style montre la conversion des chaînes de caractères, Cette feuille de style la conversion des valeurs booléennes true et false.
Page 38 L'addition, la soustraction et la multiplication emploient une syntaxe commune ( Cette feuille de style ). La syntaxe de la division est moins courante. La barre de fraction / servant aux motifs, le mot-clé div est utilisé à la place ( Cette feuille de style ). L'opérateur mod renvoie le reste d'une opération de division. ( Cette feuille de style )
Page 39 La fonction sum() additionne tous les nombres des noeuds sélectionnés. Cette feuille de style additionne tous les nombres, tandis que Cette feuille de style n'additionne que les nombres impairs.
Page 40 Les fonctions ceiling(), floor() et round() convertissent les nombres à virgule flottante en nombres entiers de la manière spécifiée.
Page 41 La fonction string() convertit son argument en une chaîne de caractères. En règle générale, cette fonction n'est pas directement employée dans les feuilles de style, car, dans la plupart des cas, elle est appelée par défaut. Cette feuille de style montre des exemples de conversion de nombres en chaînes de caractères. Notez le résultat des divisions par zéro.
Page 42 Cette feuille de style permet de tester si la valeur d'un élément est un nombre.

Fonctions booléennes

Page 43 Dans la Cette feuille de style , des chaînes de caractères constituent les arguments de la fonction boolean(). Une chaîne de caractères est vraie si et seulement si sa longueur n'est pas nulle. Dans la Cette feuille de style , le texte est converti en nombres, puis soumis à la fonction boolean(). Cette feuille de style compare "0" en tant que chaîne de caractères et en tant que nombre. Cette feuille de style emploie des ensembles de noeuds comme arguments de la fonction boolean().
Page 44 La fonction not() renvoie true si son argument est faux et false dans le cas contraire.
Page 45 Les fonctions true() et false() sont utiles lorsque certaines conditions sont testées au cours de la programmation.
Page 46 La fonction lang() renvoie true ou false suivant que la langue du noeud contextuel telle qu'elle est spécifiée par les attributs xml:lang est identique à ou est un sous-ensemble de la langue spécifiée par la chaîne d'arguments. La langue du noeud contextuel est déterminée par la valeur de l'attribut xml:lang du noeud contextuel, ou, si le noeud contextuel ne comporte pas d'attribut xml:lang, par la valeur de l'attribut xml:lang de l'ancêtre le plus proche du noeud contextuel comportant un attribut xml:lang. Si cet attribut n'est pas présent, alors la fonction lang() renvoie false. S'il est présent, la fonction lang() renvoie true si la valeur de l'attribut est égale à l'argument sans tenir compte de sa casse, ou, s'il y a un suffixe commen?ant par -, de telle sorte que la valeur de l'attribut soit égale à l'argument sans tenir compte du suffixe, ni de la casse.

Fonctions de chaînes de caractères

Page 47 La fonction string() convertit son argument en une chaîne de caractères. En règle générale, cette fonction n'est pas directement employée dans les feuilles de style, car, dans la plupart des cas, elle est appelée par défaut. Cette feuille de style montre des exemples de conversion de nombres en chaînes de caractères. Notez le résultat des divisions par zéro.
Page 48 La fonction concat() renvoie la concaténation de ses arguments.
Page 49 La fonction starts-with() renvoie true si la première chaîne d'argument commence par la seconde chaîne d'argument, et false dans le cas contraire. La fonction contains() renvoie true si la première chaîne d'argument contient la seconde chaîne d'argument, et false dans le cas contraire.
Page 50 La fonction substring-before() renvoie la sous-chaîne de la première chaîne d'argument précédant la première occurrence de la seconde chaîne d'argument dans la première, tandis que la fonction substring-after() renvoie la sous-chaîne de la première chaîne d'argument suivant la première occurrence de la seconde chaîne d'argument dans la première. La fonction substring() renvoie la sous-chaîne du premier argument en commençant à la position définie dans le deuxième argument pour la longueur spécifiée dans le troisième argument. Si le troisième argument n'est pas précisé, elle renvoie la sous-chaîne commençant à la position définie dans le deuxième argument jusqu'à la fin de la chaîne de caractères. Le comptage commence à 1 ( Cette feuille de style ). Cette feuille de style montre un exemple dans lequel certains arguments sont situés en dehors des limites ou ne sont pas des nombres entiers. La sous-chaîne renvoyée contient tous les caractères pour lesquels la position du caractère est supérieure ou égale au deuxième argument et, si le troisième argument est défini, inférieure à la somme du deuxième et troisième arguments.
Page 51 La fonction string-length() renvoie le nombre de caractères dans une chaîne. La fonction normalize-space() renvoie la chaîne d'argument dont les espaces blancs sont normalisés, c'est-à-dire que les espaces blancs de tête et de fin sont supprimés et que les séquences d'espaces blancs sont remplacées par un unique espace blanc.
Page 52 La fonction translate() renvoie la première chaîne de caractères dont certains caractères qui se retrouvent dans la deuxième chaîne d'argument sont remplacés par les caractères situés à la position correspondante dans la troisième chaîne d'argument. Si un caractère apparaît plusieurs fois dans la deuxième chaîne d'argument, sa première occurrence détermine le caractère de remplacement. Si la longueur de la troisième chaîne d'argument est supérieure à celle de la deuxième, les caractères excédentaires sont ignorés.

Fonctions d'ensembles de noeuds

Page 53 La fonction position() renvoie un nombre égal à la position du contexte, tandis que la fonction last() renvoie une nombre égal à la taille du contexte à partir du contexte d'évaluation de l'expression. Cette feuille de style montre un exemple d'utilisation de ces fonctions dans plusieurs contextes. Cette feuille de style compare l'élément xsl:for-each trié et non trié.
Page 54 La fonction count() renvoie le nombre de noeuds dans l'ensemble de noeuds passé en argument.
Page 55 La fonction id() sélectionne les éléments sur la base de l'identifiant unique qui leur est associé. Cette feuille de style montre des exemples simples d'utilisation de cette fonction. Examinez attentivement la feuille de style Cette feuille de style . Le contenu de l'élément title n'est pas affiché entre crochets "[]", car, dans la DTD, son attribut id est défini comme CDATA, et non pas comme ID. Plusieurs identifiants ID peuvent être fournis à la fois ( Cette feuille de style ).
Page 56 Exemple d'utilisation de la fonction id(). Ein Beispiel der Funktion id().
Page 57 Les fonctions name(), local-name() et namespace-uri() servent à extraire les informations relatives aux noms des éléments et des attributs, ainsi qu'aux espaces de noms.

Sortie

Page 58 L'élément xsl:output permet aux concepteurs de feuilles de style de préciser le mode de sortie de l'arbre résultat. Si un processeur XSLT génère l'arbre résultat, il doit le faire conformément à ce que spécifie l'élément xsl:output; cependant, il n'y est pas tenu. L'élément xsl:output n'est autorisé que comme élément de niveau supérieur. Cette feuille de style génère du HTML, tandis que Cette feuille de style génère du XML. Comparez la manière dont les balises vides sont générées.
Page 59 En l'absence de l'élément xml:output, la méthode de sortie par défaut est xml ( Cette feuille de style ). Toutefois, si l'élément document de la sortie comporte la valeur html (peu importe la casse) , la méthode html est utilisée ( Cette feuille de style ).
Page 60 La méthode de sortie html ne doit pas générer une balise de fin pour les éléments vides de la spécification HTML. Elle ne doit pas remplacer les caractères réservés figurant dans le contenu des éléments script et style (examinez le code source de la fenêtre du milieu dans votre navigateur). Comparez à Cette feuille de style et reportez-vous à la spécification XSLT pour plus de détails.
Page 61 L'attribut encoding précise le système de codage de caractères préférentiel à utiliser. La méthode de sortie html doit ajouter un élément META immédiatement après la balise de début de l'élément HEAD qui indique le système de codage réellement utilisé. Cette feuille de style génère une sortie en UTF-8, Cette feuille de style en UTF-16 et Cette feuille de style en Cp1250. Dans Cette feuille de style , examinez le code source de la fenêtre du milieu dans votre navigateur. Le code source du fichier xml comporte des caractères absents du jeu de caractères spécifié. Ils sont donc remplacés par leur équivalent en notation décimale.
Page 62 La méthode de sortie text génère l'arbre résultat en produisant la valeur textuelle de chaque noeud de l'arbre résultat dans l'ordre du document sans échappement. Examinez le code source dans votre navigateur pour visualiser la sortie.

Copie

Page 63 Les éléments XSL Copy et Copy-of servent à copier des noeuds. L'élément Copy ne copie que le noeud courant sans ses fils, ni les attributs, tandis que l'élément Copy-of copie tout.
Page 64 L'élément xsl:copy peut comporter un attribut use-attribute-sets. De cette manière, vous pouvez spécifier des attributs pour l'élément copié. Cette feuille de style ne fonctionne pas de la manière attendue (paramétrage de use-attribute-sets avec la fonction name()), car les expressions des attributs référençant des objets XSLT nommés ne sont pas évaluées.

Fonctions supplémentaires diverses

Page 65 La fonction current() renvoie un ensemble de noeuds dont le seul membre est le noeud courant. Pour une expression autonome (expression ne faisant partie d'aucune autre expression), le noeud courant est toujours le même que le noeud contextuel. Cependant, lorsqu'il se trouve entre crochets, le noeud courant est en règle générale différent du noeud contextuel.
Page 66 La fonction generate-id() génère des identifiants (id) conformes à la spécification XML. Cette feuille de style utilise cette fonction pour ajouter un identifiant id à tous les éléments du fichier XML source.

Combinaison de feuilles de style

Page 67 D'autres feuilles de style peuvent être importées (xsl:import) ou incluses (xsl:include) dans une feuille de style. L'importation d'une feuille de style est semblable à son inclusion, à l'exception du fait que les définitions et les règles modèle de la feuille de style dans laquelle l'importation est effectuée ont la priorité sur celles de la feuille de style importée. Cette feuille de style et Cette feuille de style sont importées ou incluses dans les autres feuilles de style.
Page 68 Cette feuille de style importe Cette feuille de style , tandis que Cette feuille de style importe Cette feuille de style .
Page 69 Autres exemples d'utilisation des éléments xsl:include et xsl:import.
Page 70 Vous pouvez utiliser l'élément xsl:apply-imports pour extraire les informations d'un modèle importé dont vous modifiez le comportement. Cette feuille de style importe Cette feuille de style et se substitue à son modèle. Cette feuille de style importe Cette feuille de style et modifie son modèle. L'élément xsl-apply-imports ne s'applique qu'aux modèles importés avec l'élément xsl:import, et pas aux modèles inclus avec l'élément xsl:include ( Cette feuille de style ).
Page 71 La préséance d'import est plus importante que la préséance de priorité. Examinez Cette feuille de style .