Tutoriel XSLT - Transformations et éléments XSLT avec exemples

Ce tutoriel explique ce qu'est XSLT, ses transformations, ses éléments et son utilisation avec des exemples. Il couvre également l'importance de XPath pour développer un code de conversion XSLT :

Le terme "XSLT" résulte de la combinaison de deux mots : "XSL" et "T". "XSL" est l'abréviation de "Extensible Stylesheet Language" (langage de feuille de style extensible) et "T" est l'abréviation de "Transformation" (transformation).

En résumé, XSLT est un langage de transformation utilisé pour transformer/convertir des documents XML sources en documents XML ou en d'autres formats tels que HTML, PDF en utilisant XSL-FO (Formatting Objects), etc.

Introduction à XSLT

Ce processeur XSLT prend un ou plusieurs documents XML comme source avec un fichier XSLT qui contient le code XSLT écrit dedans et les documents de résultat/de sortie seront générés plus tard comme le montre le diagramme ci-dessous.

Le processeur XSLT analyse les documents XML sources en utilisant X-Path pour naviguer entre les différents éléments sources en partant de l'élément racine jusqu'à la fin des documents.

Tout ce qu'il faut savoir sur X-Path

Transformation XSLT

Pour commencer la transformation, nous avons besoin d'un document XML sur lequel le code XSLT sera exécuté, du fichier de code XSLT lui-même et de l'outil ou du logiciel doté d'un processeur XSLT (vous pouvez utiliser n'importe quelle version gratuite ou version d'essai du logiciel à des fins d'apprentissage).

#1) Code XML

Vous trouverez ci-dessous le code source XML sur lequel le code XSLT sera exécuté.

Nom du fichier : Livres.xml

 XSLT Programmer's Reference Michael Kay Wrox $40 4ème Head First Java Kathy Sierra O'reilly $19 1er SQL The Complete Reference James R. Groff McGraw-Hill $45 3ème 

#2) Code XSLT

Vous trouverez ci-dessous le code XSLT qui sera exécuté sur le document XML ci-dessus.

Nom du fichier : Livres.xsl

Livres:-

ID du livre Nom du livre Nom de l'auteur Éditeur Prix Édition

#3) Résultat / Code de sortie

Le code ci-dessous sera produit après avoir utilisé le code XSLT sur le document XML ci-dessus.

Livres:-

ID du livre Nom du livre Nom de l'auteur Éditeur Prix Édition
5350192956 Référence du programmeur XSLT Michael Kay Wrox $40 4ème
3741122298 Premier chef de file Java Kathy Sierra O'reilly $19 1er
9987436700 SQL - La référence complète James R. Groff McGraw-Hill $45 3ème

#4) Visualiser le résultat / la sortie dans le navigateur Web

Livres :

ID du livre Nom du livre Nom de l'auteur Éditeur Prix Édition
5350192956 Référence du programmeur XSLT Michael Kay Wrox $40 4ème
3741122298 Premier chef de file Java Kathy Sierra O'reilly $19 1er
9987436700 SQL - La référence complète James R. Groff McGraw-Hill $45 3ème

Éléments XSLT

Pour comprendre le code XSLT ci-dessus et son fonctionnement, nous devons d'abord comprendre les différents éléments XSLT et leurs attributs.

#1) OU

Tout code XSLT doit commencer par l'élément racine, soit ou

Attributs :

  • @xmlns:xsl : Connecte le document XSLT au standard XSLT.
  • @version : Définit la version du code XSLT pour l'analyseur.

#2)

Cette déclaration définit un ensemble de règles appliquées pour traiter ou transformer l'élément d'entrée sélectionné du document source en fonction des règles définies pour l'élément cible des documents de sortie.

Fondamentalement, deux types de modèles sont disponibles en fonction de leurs attributs :

(i) Modèle nommé : Lorsque l'élément xsl : template contient l'attribut @name, on parle de Named Template.

Les modèles nommés sont appelés par l'élément xsl:call-template.

(ii) Modèle de correspondance : L'élément xsl:template contient l'attribut @match qui contient un modèle de correspondance ou XPath appliqué aux nœuds d'entrée.

Les modèles de correspondance sont appelés par l'élément xsl:apply-template.

Un élément xsl:template qui n'a pas d'attribut match ne doit pas avoir d'attribut mode ni d'attribut priority.

Réécrivons la XSLT(

a) Code XSLT basé sur Match Template avec . Voir ci-dessous le code modifié surligné en jaune & ; gris, il produira le même résultat que ci-dessus.

Livres:-

ID du livre Nom du livre Nom de l'auteur Éditeur Prix Édition

Voir la capture d'écran pour la zone en surbrillance :

b) Code XSLT basé sur le Named Template avec . Voir ci-dessous le code modifié en jaune & ; surligné en gris, il produira le même résultat que ci-dessus.

Livres:-

ID du livre Nom du livre Nom de l'auteur Éditeur Prix Édition

Voir la capture d'écran pour la zone en surbrillance :

#3)

Le processeur trouvera et appliquera tous les modèles dont l'attribut @select contient une définition XPath.

L'attribut @mode est également utilisé si l'on souhaite obtenir plusieurs types de résultats avec le même contenu d'entrée.

#4)

Le processeur fera un appel aux modèles ayant une valeur à l'intérieur de l'attribut @name (obligatoire).

est utilisé pour transmettre des paramètres au modèle.

#5)

Fournir la valeur de la chaîne/du texte correspondant à l'expression XPath définie dans l'attribut @select, comme défini dans le code ci-dessus.

Cela donnera la valeur du nom du livre.

#6) : Répétition

Cela permet de traiter les instructions pour chaque ensemble de nœuds (xpath défini dans l'attribut @select (obligatoire)) dans la séquence triée.

Le code ci-dessus signifie pour chaque nœud un ensemble de moyens magasin/livre :

/store/book[1]

/store/book[2]

/store/book[3]

peut également être utilisé comme enfant de xsl:for-each pour définir l'ordre de tri.

#7) : Traitement conditionnel

Les instructions xsl:if ne seront traitées que si la valeur booléenne de l'attribut @test est vraie, sinon l'instruction ne sera pas évaluée et la séquence vide sera renvoyée.

 2"> ; Condition True : Le nombre de livres est supérieur à deux. 

Résultat : Condition vraie : le nombre de livres est supérieur à deux.

Ici, count() est la fonction prédéfinie.

#8) : Traitement des conditions alternatives

xsl:choose a plusieurs causes pour différentes conditions qui sont testées à l'intérieur de l'attribut @test des éléments xsl:when, la condition de test qui se vérifie en premier parmi tous les xsl:when, sera traitée en premier et il y a un élément xls:otherwise optionnel de sorte que si aucun des tests de condition ne se vérifie alors ce xsl:otherwise sera pris en compte.

 Condition vraie : le nombre de livres est de un. Condition vraie : le nombre de livres est de deux. Condition vraie : le nombre de livres est de trois. Aucune condition ne correspond. 

Résultat : Condition vraie : le nombre de pages du livre est de trois.

#9)

xsl:copy fonctionne sur l'élément de contexte, c'est-à-dire que s'il s'agit d'un nœud, il copiera le nœud de contexte dans le nœud nouvellement généré et ne copiera pas les enfants du nœud de contexte. C'est pour cette raison que l'on parle de copie superficielle. Contrairement à l'élément xsl:copy-of, xsl:copy n'a pas l'attribut@select.

Dans le code ci-dessous, les éléments de contexte sont copiés dans la sortie & ; tous les éléments enfants sont appelés & ; copiés par le modèle xsl:apply-template de manière récursive.

nœud() Représente tous les nœuds et tous leurs attributs de manière récursive.

Résultat : Cette opération copiera tous les nœuds et attributs du document source de manière récursive dans le document de sortie, c'est-à-dire qu'elle créera une copie exacte du document source.

#10)

xsl:copy-of copiera par défaut la séquence de nœuds avec tous ses enfants et attributs de manière récursive, en raison de cette nature, on parle également de copie profonde. L'attribut @select est nécessaire pour l'évaluation de l'XPath.

Résultat : Cette opération copiera tous les nœuds et attributs du document source de manière récursive dans le document de sortie, c'est-à-dire qu'elle créera une copie exacte du document source.

Représente une copie du nœud et de l'attribut actuels.

#11)

Cet élément est utilisé pour écrire un commentaire dans le résultat cible, tout contenu textuel qui utilise cette balise sera imprimé en tant que sortie commentée.

Il sera imprimé en sortie comme un nœud de commentaire.

Résultat :

#12)

Cela génère un nœud de texte dans le document de résultat, la valeur contenue dans le xsl:text est imprimée sous forme de chaîne de caractères en sortie.

Il s'agit d'un

ligne de texte.

Sortie :

Il s'agit d'un

ligne de texte.

#13)

Cela génère un élément dans le document de résultat avec le nom mentionné dans l'attribut @name. L'attribut name est l'attribut obligatoire.

Résultat : 5350192956

#14)

Cela génère un attribut à son élément parent dans le document de résultat. Le nom de l'attribut est défini par l'attribut name et la valeur de l'attribut est calculée par le XPath mentionné dans l'attribut select comme indiqué dans le code ci-dessous. L'attribut name est l'attribut obligatoire.

Résultat :

#15)

Cet élément permet de trier le nœud sélectionné de manière séquentielle, dans le sens ascendant ou descendant. Le nœud ou XPath est donné par l'attribut @select et le sens du tri est défini par l'attribut @order.

Dans le code ci-dessous, nous obtiendrons la liste de tous les livres en fonction de leur nom dans l'ordre alphabétique.

Livres:-

ID du livre Nom du livre Nom de l'auteur Éditeur Prix Édition

Reportez-vous à cette capture d'écran pour connaître la zone en surbrillance :

Résultat : La liste ci-dessous contient les noms de livres par ordre alphabétique, c'est-à-dire par ordre croissant.

Livres :

ID du livre Nom du livre Nom de l'auteur Éditeur Prix Édition
3741122298 Premier chef de file Java Kathy Sierra O'reilly $19 1er
9987436700 SQL - La référence complète James R. Groff McGraw-Hill $45 3ème
5350192956 Référence du programmeur XSLT Michael Kay Wrox $40 4ème

#16)

Cet élément déclare une variable qui contient une valeur. Une variable peut être une variable globale ou une variable locale. Le nom de la variable est défini par l'attribut @name et la valeur que cette variable contiendra est définie par l'attribut @select.

L'accès à la variable globale est global, c'est-à-dire que les variables peuvent être appelées dans n'importe quel élément et restent accessibles dans la feuille de style.

Pour définir une variable globale, il suffit de déclarer qu'à côté de l'élément racine de la feuille de style, comme le montre le code ci-dessous en jaune, la variable 'SecondBook' est la variable globale et contient le nom du deuxième livre.

L'accès à la variable locale est local à l'élément dans lequel elle est définie, c'est-à-dire que cette variable n'est pas accessible en dehors de l'élément dans lequel elle est définie, comme le montre le code ci-dessous qui est surligné en gris, la variable "premier livre" est une variable locale et contient le nom du premier livre.

Pour appeler la variable globale à la variable locale, le symbole du dollar ($) est utilisé avant le nom de la variable, comme indiqué ci-dessous en jaune. $ .

 Nom du premier livre : Nom du deuxième livre : 

Reportez-vous à la capture d'écran pour la zone en surbrillance :

Résultat :

Nom du premier livre : XSLT Programmer's Reference

Deuxième nom de livre : Head First Java

#17)

Cet élément est utilisé pour déclarer des clés, pour les valeurs du modèle de correspondance à cette clé particulière.

Name est un fournisseur de cette clé par @name attribute(" obtenir un éditeur "L'attribut @match est fourni pour indexer le nœud d'entrée par des expressions XPath (" livre "), comme dans l'exemple ci-dessous, @match est utilisé pour indexer tous les livres disponibles dans le magasin.

Par rapport à l'attribut @match, l'attribut @use est utilisé, il déclare le nœud pour obtenir la valeur de cette clé par l'expression XPath ("publisher").

Supposons maintenant que nous ayons besoin des détails du livre publié uniquement par l'éditeur "Wrox", nous pouvons obtenir cette valeur facilement grâce à l'élément xsl:key en créant une paire clé-valeur.

key('get-publisher', 'Wrox') Key() prend deux paramètres, le premier est le nom de la clé, qui dans ce cas est 'get-publisher', le second est la valeur de la chaîne qui doit être recherchée, qui dans notre cas est 'Wrox'.

Livres:-

ID du livre Nom du livre Nom de l'auteur Éditeur Prix Édition

Reportez-vous à la capture d'écran pour la zone en surbrillance :

Résultat :

Livres:-

ID du livre Nom du livre Nom de l'auteur Éditeur Prix Édition
5350192956 Référence du programmeur XSLT Michael Kay Wrox $40 4ème

Résultat / Vue HTML :

Livres :

ID du livre Nom du livre Nom de l'auteur Éditeur Prix Édition
5350192956 Référence du programmeur XSLT Michael Kay Wrox $40 4ème

#18)

Cet élément est utilisé à des fins de débogage dans le cadre du développement XSLT. L'élément transmet sa sortie à l'écran de sortie standard de l'application.

L'attribut @terminate est utilisé avec deux valeurs : "yes" ou "no". Si la valeur est "yes", l'analyseur syntaxique se termine immédiatement dès que la condition de test est remplie pour que le message soit exécuté.

Pour comprendre cela, supposons que dans notre document d'entrée, l'élément prix soit accidentellement vide comme dans le code ci-dessous, alors le traitement doit s'arrêter immédiatement dès que le processeur rencontre l'élément prix vide, ce qui peut être facilement réalisé en utilisant xsl:message à l'intérieur de la condition de test if comme dans le code XSLT ci-dessous.

L'alerte du débogueur est affichée sur l'écran standard de l'application : Traitement terminé par xsl:message à la ligne 21.

Code XML d'entrée :

 SQL The Complete Reference James R. Groff McGraw-Hill 3rd 

Reportez-vous à la capture d'écran pour la zone en surbrillance :

Code XSLT :

Livres:-

Terminaison : l'élément de prix est vide.
ID du livre Nom du livre Nom de l'auteur Éditeur Prix Édition

Se référer à la capture d'écran pour la zone en surbrillance :

Résultat : Veuillez noter que dès que l'analyseur syntaxique rencontre la balise de prix vide, il met immédiatement fin au traitement, car les balises de fermeture , et ne viendraient pas à la fin du fichier.

Livres:-

ID du livre Nom du livre Nom de l'auteur Éditeur Prix Édition
5350192956 Référence du programmeur XSLT Michael Kay Wrox $40 4ème
3741122298 Premier chef de file Java Kathy Sierra O'reilly $19 1er

Reportez-vous à la capture d'écran pour la zone en surbrillance :

#19) & ;

définit le paramètre du modèle s'il est défini à l'intérieur de celui-ci. Il peut être défini soit à l'intérieur comme paramètre global, soit à l'intérieur comme paramètre local de ce modèle.

La valeur de est passée/fournie lorsque le modèle est appelé par ou .

il transmet la valeur du paramètre défini à l'intérieur de L'attribut @name contient le nom du paramètre qui doit correspondre à l'attribut @name de l'élément. L'attribut @Select est utilisé pour définir une valeur à ce paramètre.

Le signe dollar ($) est utilisé pour récupérer la valeur du paramètre, comme pour une variable.

Code source XML :

 XSLT Programmer's Reference Michael Kay Wrox $40 4ème Head First Java Kathy Sierra O'reilly $19 1er SQL The Complete Reference James R. Groff McGraw-Hill $45 3ème 

Code XSLT :

Liste des livres Nom :-

Nom du livre :

Reportez-vous à la capture d'écran pour la zone mise en évidence :

Résultat de la sortie :

Liste des livres Nom :-

Nom du livre : XSLT Programmer's Reference

Nom du livre : Head First Java

Nom du livre : SQL The Complete Reference

#20)

est utilisé pour importer un autre module de feuille de style à l'intérieur de notre feuille de style actuelle, ce qui permet d'obtenir une approche modulaire du développement XSLT.

La priorité des modèles définis dans la feuille de style parente (qui importe une autre feuille de style) est supérieure à celle de la feuille de style importée (qui est importée par la feuille de style parente).

Si une autre feuille de style porte le même nom de modèle que celui défini dans le modèle qui est importé, les modèles étrangers sont remplacés par votre propre modèle.

L'attribut @href est utilisé comme URI de la feuille de style à importer.

#21)

Comme pour xsl:import ci-dessus, cela permet également d'obtenir une approche modulaire du développement XSLT. Tous les modèles inclus par ont la même priorité que la feuille de style appelante. C'est comme si vous copiiez tous les modèles d'une autre feuille de style dans votre propre feuille de style.

L'attribut @href est utilisé comme URI de la feuille de style à importer.

#22)

Cet élément est utilisé pour spécifier l'arbre de résultats dans le fichier de sortie. Il contient des attributs tels que @method qui peut prendre des valeurs telles que "XML", "HTML", "XHTML" et "text", la valeur par défaut étant "XML".

@encoding spécifie l'encodage de caractères qui vient dans le fichier de sortie comme montré dans l'exemple ci-dessous encoding="UTF-16″, les valeurs par défaut pour XML ou XHTML peuvent être soit UTF-8 soit UTF-16. @indent spécifie l'indentation du code de sortie XML ou HTML, pour XML la valeur par défaut est 'no' et pour HTML et XHTML la valeur par défaut est yes.

#23)

Cet élément est utilisé pour supprimer les espaces non significatifs de l'élément source répertorié dans l'attribut @element. Si l'on souhaite supprimer les espaces de tous les éléments, on peut utiliser "*" dans l'attribut @elements.

#24)

Cet élément est utilisé pour préserver les espaces blancs de l'élément source répertorié dans l'attribut @element. Si l'on souhaite préserver les espaces blancs de tous les éléments, on peut utiliser "*" dans l'attribut @elements.

Conclusion

Ainsi, dans cet article, nous avons appris ce qu'est XSLT, les éléments XSLT fréquemment utilisés, leur utilisation avec des exemples de code source et de code cible/résultat, la conversion ou la transformation de l'élément source en élément cible.

Nous avons également discuté de l'importance de XPath pour développer le code de conversion XSLT. Nous avons vu la déclaration de modèle XSL et l'appel de modèle & ; le passage de paramètres. Nous avons appris à déclarer les variables globales et locales, leur utilisation dans le code XSLT, et comment les appeler.

Nous avons appris à connaître les différents éléments XSLT de branchement ou conditionnels comme xsl:if, xsl:for-each, xsl:choose. Nous avons compris la différence entre la copie superficielle et la copie profonde, le tri des nœuds, le débogage du code XSLT en utilisant xsl:message, la différence entre les modèles nommés et les modèles de correspondance, et le formatage de la sortie en utilisant xsl:output.

A propos de l'auteur : Himanshu P. est un professionnel expérimenté dans le domaine des technologies de l'information. Il a travaillé avec les multinationales de l'ITC sur des domaines transversaux et des technologies multiples. Le passe-temps favori de Himanshu est la lecture de magazines et le blogging.

Remonter