Guide rapide XSLT

XSL

Avant d'apprendre XSLT, nous devons d'abord comprendre XSL qui signifie EXtendu Sfeuille de style Language. Il est similaire au XML comme CSS l'est au HTML.

Besoin de XSL

Dans le cas d'un document HTML, les balises sont prédéfinies telles que table, div et span; et le navigateur sait comment leur ajouter du style et les afficher à l'aide de styles CSS. Mais dans le cas de documents XML, les balises ne sont pas prédéfinies. Afin de comprendre et de styliser un document XML, le World Wide Web Consortium (W3C) a développé XSL qui peut agir comme un langage de feuille de style basé sur XML. Un document XSL spécifie comment un navigateur doit rendre un document XML.

Voici les principales parties de XSL -

  • XSLT - utilisé pour transformer un document XML en divers autres types de document.

  • XPath - utilisé pour naviguer dans le document XML.

  • XSL-FO - utilisé pour formater un document XML.

Qu'est-ce que XSLT

XSLT, Extensible Stylesheet Language Transformations, offre la possibilité de transformer automatiquement les données XML d'un format à un autre.

Comment fonctionne XSLT

Une feuille de style XSLT est utilisée pour définir les règles de transformation à appliquer sur le document XML cible. La feuille de style XSLT est écrite au format XML. Le processeur XSLT prend la feuille de style XSLT et applique les règles de transformation sur le document XML cible, puis génère un document formaté au format XML, HTML ou texte. Ce document formaté est ensuite utilisé par le formateur XSLT pour générer la sortie réelle qui doit être affichée à l'utilisateur final.

Avantages

Voici les avantages de l'utilisation de XSLT -

  • Indépendant de la programmation. Les transformations sont écrites dans un fichier xsl séparé qui est à nouveau un document XML.

  • La sortie peut être modifiée en modifiant simplement les transformations dans le fichier xsl. Pas besoin de changer de code. Ainsi, les concepteurs Web peuvent modifier la feuille de style et voir rapidement le changement dans la sortie.

Supposons que nous ayons l'exemple de fichier XML suivant, Students.xml, qui doit être transformé en un document HTML bien formaté.

students.xml

<?xml version = "1.0"?>
<class> 
   <student rollno = "393">
      <firstname>Dinkar</firstname> 
      <lastname>Kad</lastname> 
      <nickname>Dinkar</nickname> 
      <marks>85</marks>
   </student> 
   <student rollno = "493"> 
      <firstname>Vaneet</firstname> 
      <lastname>Gupta</lastname> 
      <nickname>Vinni</nickname> 
      <marks>95</marks>
   </student> 
   <student rollno = "593"> 
      <firstname>Jasvir</firstname> 
      <lastname>Singh</lastname> 
      <nickname>Jazz</nickname> 
      <marks>90</marks> 
   </student> 
</class>

Nous devons définir un document de feuille de style XSLT pour le document XML ci-dessus afin de répondre aux critères suivants -

  • La page doit avoir un titre Students.

  • La page doit avoir un tableau des détails de l'élève.

  • Les colonnes doivent avoir les en-têtes suivants: numéro de rouleau, prénom, nom de famille, surnom, marques

  • Le tableau doit contenir les détails des étudiants en conséquence.

Étape 1: créer un document XSLT

Créez un document XSLT pour répondre aux exigences ci-dessus, nommez-le Students.xsl et enregistrez-le dans le même emplacement où se trouve student.xml.

students.xsl

<?xml version = "1.0" encoding = "UTF-8"?>
<!-- xsl stylesheet declaration with xsl namespace: 
Namespace tells the xlst processor about which 
element is to be processed and which is used for output purpose only 
--> 
<xsl:stylesheet version = "1.0" 
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">   
<!-- xsl template declaration:  
template tells the xlst processor about the section of xml 
document which is to be formatted. It takes an XPath expression. 
In our case, it is matching document root element and will 
tell processor to process the entire document with this template. 
--> 
   <xsl:template match = "/"> 
      <!-- HTML tags 
         Used for formatting purpose. Processor will skip them and browser 
            will simply render them. 
      --> 
		
      <html> 
         <body> 
            <h2>Students</h2> 
				
            <table border = "1"> 
               <tr bgcolor = "#9acd32"> 
                  <th>Roll No</th> 
                  <th>First Name</th> 
                  <th>Last Name</th> 
                  <th>Nick Name</th> 
                  <th>Marks</th> 
               </tr> 
				
               <!-- for-each processing instruction 
               Looks for each element matching the XPath expression 
               --> 
				
               <xsl:for-each select="class/student"> 
                  <tr> 
                     <td> 
                        <!-- value-of processing instruction 
                        process the value of the element matching the XPath expression 
                        --> 
                        <xsl:value-of select = "@rollno"/> 
                     </td> 
						
                     <td><xsl:value-of select = "firstname"/></td> 
                     <td><xsl:value-of select = "lastname"/></td> 
                     <td><xsl:value-of select = "nickname"/></td> 
                     <td><xsl:value-of select = "marks"/></td> 
						
                  </tr> 
               </xsl:for-each> 
					
            </table> 
         </body> 
      </html> 
   </xsl:template>  
</xsl:stylesheet>

Étape 2: liez le document XSLT au document XML

Mettez à jour le document student.xml avec la balise xml-stylesheet suivante. Définissez la valeur href sur Students.xsl

<?xml version = "1.0"?> 
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?> 
<class> 
... 
</class>

Étape 3: afficher le document XML dans Internet Explorer

students.xml

<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?> 
<class> 
   <student rollno = "393"> 
      <firstname>Dinkar</firstname> 
      <lastname>Kad</lastname> 
      <nickname>Dinkar</nickname> 
      <marks>85</marks> 
   </student> 
   <student rollno = "493"> 
      <firstname>Vaneet</firstname> 
      <lastname>Gupta</lastname> 
      <nickname>Vinni</nickname> 
      <marks>95</marks> 
   </student> 
   <student rollno = "593"> 
      <firstname>Jasvir</firstname> 
      <lastname>Singh</lastname> 
      <nickname>Jazz</nickname> 
      <marks>90</marks> 
   </student> 
</class>

Production

<xsl: template> définit un moyen de réutiliser des modèles afin de générer la sortie souhaitée pour les nœuds d'un type / contexte particulier.

Déclaration

Voici la déclaration de syntaxe de <xsl:template> élément.

<xsl:template 
   name = Qname 
   match = Pattern 
   priority = number 
   mode = QName >
</xsl:template>

Les attributs

Sr.Non Nom et description
1

name

Nom de l'élément sur lequel le modèle doit être appliqué.

2

match

Motif qui signifie le ou les éléments sur lesquels le modèle doit être appliqué.

3

priority

Numéro de priorité d'un modèle. Le modèle de correspondance avec une priorité faible n'est pas pris en compte en avant du modèle de priorité élevée.

4

mode

Permet à l'élément d'être traité plusieurs fois pour produire un résultat différent à chaque fois.

Éléments

Nombre d'occurrences Illimité

Parent elements

xsl: feuille de style, xsl: transform

Child elements

xsl: apply-importations, xsl: apply-templates, xsl: attribut, xsl: call-template, xsl: choose, xsl: comment, xsl: copy, xsl: copy-of, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: number, xsl: param, xsl: processing-instruction, xsl: text, xsl: value-of, xsl: variable, éléments de sortie

Exemple de démonstration

Cette règle de modèle a un modèle qui identifie les éléments <student> et produit une sortie dans un format tabulaire.

students.xml

<?xml version = "1.0"?> 
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?> 
<class> 
   <student rollno = "393"> 
      <firstname>Dinkar</firstname> 
      <lastname>Kad</lastname> 
      <nickname>Dinkar</nickname> 
      <marks>85</marks> 
   </student> 
   <student rollno = "493"> 
      <firstname>Vaneet</firstname> 
      <lastname>Gupta</lastname> 
      <nickname>Vinni</nickname> 
      <marks>95</marks> 
   </student> 
   <student rollno = "593"> 
      <firstname>Jasvir</firstname> 
      <lastname>Singh</lastname> 
      <nickname>Jazz</nickname> 
      <marks>90</marks> 
   </student> 
</class>

students_imports.xsl

<?xml version = "1.0" encoding = "UTF-8"?> 
<xsl:stylesheet version = "1.0" 
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">  
	
   <xsl:template match = "/"> 
      <html> 
         <body> 
            <h2>Students</h2> 
            <table border = "1"> 
               <tr bgcolor = "#9acd32"> 
                  <th>Roll No</th> 
                  <th>First Name</th> 
                  <th>Last Name</th> 
                  <th>Nick Name</th> 
                  <th>Marks</th> 
               </tr>
					
               <xsl:for-each select = "class/student"> 
                  <tr> 
                     <td><xsl:value-of select = "@rollno"/></td> 
                     <td><xsl:value-of select = "firstname"/></td> 
                     <td><xsl:value-of select = "lastname"/></td> 
                     <td><xsl:value-of select = "nickname"/></td> 
                     <td><xsl:value-of select = "marks"/></td>
                  </tr> 
               </xsl:for-each> 
            </table> 
         </body> 
      </html> 
   </xsl:template>  
</xsl:stylesheet>

Production

La balise <xsl: value-of> met la valeur du nœud sélectionné selon l'expression XPath, sous forme de texte.

Déclaration

Voici la déclaration de syntaxe de <xsl:value-of> élément.

<xsl:value-of
   select = Expression
   disable-output-escaping = "yes" | "no" >
</xsl:value-of>

Les attributs

Sr.Non Nom et description
1

Select

Expression XPath à évaluer dans le contexte actuel.

2

disable-outputescaping

Par défaut - "non". Si "oui", le texte de sortie n'échappera pas les caractères xml du texte.

Éléments

Nombre d'occurrences Illimité

Parent elements

xsl: attribut, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: sinon, xsl: param, xsl: instruction de traitement, xsl: template , xsl: variable, xsl: when, xsl: with-param, éléments de sortie

Child elements

Aucun

Exemple de démonstration

Cet exemple crée une table d'élément <student> avec son attribut rollno et son enfant <firstname>, <lastname>, <nickname> et <marks>.

students.xml

<?xml version = "1.0"?> 
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?> 
<class> 
   <student rollno = "393"> 
      <firstname>Dinkar</firstname> 
      <lastname>Kad</lastname> 
      <nickname>Dinkar</nickname> 
      <marks>85</marks> 
   </student> 
   <student rollno = "493"> 
      <firstname>Vaneet</firstname> 
      <lastname>Gupta</lastname> 
      <nickname>Vinni</nickname> 
      <marks>95</marks> 
   </student> 
   <student rollno = "593"> 
      <firstname>Jasvir</firstname> 
      <lastname>Singh</lastname> 
      <nickname>Jazz</nickname> 
      <marks>90</marks> 
   </student> 
</class>

students.xsl

<?xml version = "1.0" encoding = "UTF-8"?> 
   <xsl:stylesheet version = "1.0" 
      xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
		
   <xsl:template match = "/"> 
      <html> 
         <body> 
            <h2>Students</h2> 
            <table border = "1"> 
               <tr bgcolor = "#9acd32"> 
                  <th>Roll No</th> 
                  <th>First Name</th> 
                  <th>Last Name</th> 
                  <th>Nick Name</th> 
                  <th>Marks</th> 
               </tr> 
					
               <xsl:for-each select = "class/student"> 
                  <tr> 
                     <td><xsl:value-of select = "@rollno"/></td> 
                     <td><xsl:value-of select = "firstname"/></td> 
                     <td><xsl:value-of select = "lastname"/></td> 
                     <td><xsl:value-of select = "nickname"/></td> 
                     <td><xsl:value-of select = "marks"/></td> 
                  </tr> 
               </xsl:for-each> 
					
            </table> 
         </body> 
      </html> 
   </xsl:template>  
</xsl:stylesheet>

Vérifiez la sortie

La balise <xsl: for-each> applique un modèle à plusieurs reprises pour chaque nœud.

Déclaration

Voici la déclaration de syntaxe de <xsl:for-each> élément

<xsl:for-each
   select = Expression >  
</xsl:for-each>

Les attributs

Sr.Non Nom et description
1

Select

Expression XPath à évaluer dans le contexte actuel pour déterminer l'ensemble de nœuds à itérer.

Éléments

Nombre d'occurrences Illimité

Parent elements

xsl: attribut, xsl: commentaire, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: sinon, xsl: param, xsl: processinginstruction, xsl: template, xsl: variable, xsl: when, xsl: with-param, éléments de sortie.

Child elements

xsl: apply-importations, xsl: apply-templates, xsl: attribut, xsl: call-template, xsl: choose, xsl: comment, xsl: copy, xsl: copy-of, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: number, xsl: processing-instruction, xsl: sort, xsl: text, xsl: value-of, xsl: variable.

Exemple de démonstration

Cet exemple crée une table de l'élément <student> avec son attribut rollno et son enfant <firstname> ,<lastname> <nickname> et <marks> en itérant sur chaque élève.

students.xml

<?xml version = "1.0"?> 
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?> 
<class> 
   <student rollno = "393"> 
      <firstname>Dinkar</firstname> 
      <lastname>Kad</lastname> 
      <nickname>Dinkar</nickname> 
      <marks>85</marks> 
   </student> 
   <student rollno = "493"> 
      <firstname>Vaneet</firstname> 
      <lastname>Gupta</lastname> 
      <nickname>Vinni</nickname> 
      <marks>95</marks> 
   </student> 
   <student rollno = "593"> 
      <firstname>Jasvir</firstname> 
      <lastname>Singh</lastname> 
      <nickname>Jazz</nickname> 
      <marks>90</marks> 
   </student> 
</class>

students.xsl

<?xml version = "1.0" encoding = "UTF-8"?> 
   <xsl:stylesheet version = "1.0" 
      xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
   <xsl:template match = "/"> 
      <html> 
         <body> 
            <h2>Students</h2> 
            <table border = "1"> 
               <tr bgcolor = "#9acd32"> 
                  <th>Roll No</th> 
                  <th>First Name</th> 
                  <th>Last Name</th> 
                  <th>Nick Name</th> 
                  <th>Marks</th> 
               </tr> 
					
               <xsl:for-each select = "class/student"> 
					
                  <tr> 
                     <td><xsl:value-of select = "@rollno"/></td> 
                     <td><xsl:value-of select = "firstname"/></td> 
                     <td><xsl:value-of select = "lastname"/></td> 
                     <td><xsl:value-of select = "nickname"/></td> 
                     <td><xsl:value-of select = "marks"/></td> 
                  </tr> 
               </xsl:for-each> 
					
            </table> 
         </body> 
      </html> 
   </xsl:template>  
</xsl:stylesheet>

Production

La balise <xsl: sort> spécifie un critère de tri sur les nœuds.

Déclaration

Voici la déclaration de syntaxe de <xsl:sort> élément.

<xsl:sort 
   select = string-expression  
   lang = { nmtoken } 
   data-type = { "text" | "number" | QName } 
   order = { "ascending" | "descending" } 
   case-order = { "upper-first" | "lower-first" } > 
</xsl:sort>

Les attributs

Sr.Non Nom et description
1

select

Clé de tri du nœud.

2

lang

Alphabet de langue utilisé pour déterminer l'ordre de tri.

3

data-type

Type de données du texte.

4

order

Ordre de tri. La valeur par défaut est "croissant".

5

case-order

Ordre de tri de la chaîne par capitalisation. La valeur par défaut est "en haut en premier".

Éléments

Number of occurrences Illimité
Parent elements xsl: apply-templates, xsl: for-each
Child elements Aucun

Exemple de démonstration

Cet exemple crée une table d'élément <student> avec son attribut rollno et ses enfants <prénom>, <lastname>, <nickname> et <marks> en itérant sur chaque élève, les trient par prénom.

students.xml

<?xml version = "1.0"?> 
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?> 
<class> 
   <student rollno = "393"> 
      <firstname>Dinkar</firstname> 
      <lastname>Kad</lastname> 
      <nickname>Dinkar</nickname> 
      <marks>85</marks> 
   </student> 
   <student rollno = "493"> 
      <firstname>Vaneet</firstname> 
      <lastname>Gupta</lastname> 
      <nickname>Vinni</nickname> 
      <marks>95</marks> 
   </student> 
   <student rollno = "593"> 
      <firstname>Jasvir</firstname> 
      <lastname>Singh</lastname> 
      <nickname>Jazz</nickname> 
      <marks>90</marks>
   </student>
</class>

students.xsl

<?xml version = "1.0" encoding = "UTF-8"?> 
<xsl:stylesheet version = "1.0" 
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">    
   <xsl:template match = "/"> 
      <html> 
         <body> 
            <h2>Students</h2> 
            <table border = "1"> 
               <tr bgcolor = "#9acd32"> 
                  <th>Roll No</th> 
                  <th>First Name</th> 
                  <th>Last Name</th> 
                  <th>Nick Name</th> 
                  <th>Marks</th> 
               </tr> 
					
               <xsl:for-each select = "class/student"> 
					
                  <xsl:sort select = "firstname"/> 
                  <tr> 
                     <td><xsl:value-of select = "@rollno"/></td> 
                     <td><xsl:value-of select = "firstname"/></td> 
                     <td><xsl:value-of select = "lastname"/></td> 
                     <td><xsl:value-of select = "nickname"/></td> 
                     <td><xsl:value-of select = "marks"/></td> 
                  </tr> 
               </xsl:for-each> 
            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

Production

La balise <xsl: if> spécifie un test conditionnel par rapport au contenu des nœuds.

Déclaration

Voici la déclaration de syntaxe de <xsl:if> élément.

<xsl:if 
  test = boolean-expression > 
</xsl:if>

Les attributs

Sr.Non Nom et description
1

test

La condition dans les données xml à tester.

Éléments

Nombre d'occurrences Illimité

Parent elements

xsl: attribut, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: sinon, xsl: param, xsl: processing-instruction, xsl: template, xsl: variable, xsl: when, xsl: with-param, éléments de sortie

Child elements

xsl: apply-templates, xsl: attribute, xsl: call-template, xsl: choose, xsl: comment, xsl: copy, xsl: copy-of, xsl: element, xsl: for-each, xsl: if, xsl: instruction-de-traitement, xsl: texte, xsl: valeur-de, xsl: variable, éléments de sortie

Exemple de démonstration

Cet exemple crée une table d'élément <student> avec son attribut rollnoet son enfant <firstname>, <lastname>, <nickname> et <marks> en itérant sur chaque élève. Il vérifie que les notes sont supérieures à 90, puis imprime les détails des élèves.

students.xml

<?xml version = "1.0"?> 
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?> 
<class> 
   <student rollno = "393"> 
      <firstname>Dinkar</firstname> 
      <lastname>Kad</lastname> 
      <nickname>Dinkar</nickname> 
      <marks>85</marks> 
   </student> 
   <student rollno = "493"> 
      <firstname>Vaneet</firstname> 
      <lastname>Gupta</lastname> 
      <nickname>Vinni</nickname> 
      <marks>95</marks> 
   </student> 
   <student rollno = "593"> 
      <firstname>Jasvir</firstname> 
      <lastname>Singh</lastname> 
      <nickname>Jazz</nickname> 
      <marks>90</marks> 
   </student> 
</class>

students.xsl

<?xml version = "1.0" encoding = "UTF-8"?> 
<xsl:stylesheet version = "1.0" 
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
   <xsl:template match = "/"> 
      <html> 
         <body> 
            <h2>Students</h2> 
            <table border = "1"> 
               <tr bgcolor = "#9acd32"> 
                  <th>Roll No</th> 
                  <th>First Name</th> 
                  <th>Last Name</th> 
                  <th>Nick Name</th> 
                  <th>Marks</th> 
               </tr> 
					
               <xsl:for-each select = "class/student"> 
					
                  <xsl:if test = "marks > 90"> 
                     <tr> 
                        <td><xsl:value-of select = "@rollno"/></td> 
                        <td><xsl:value-of select = "firstname"/></td> 
                        <td><xsl:value-of select = "lastname"/></td> 
                        <td><xsl:value-of select = "nickname"/></td> 
                        <td><xsl:value-of select = "marks"/></td> 
                     </tr> 
                  </xsl:if> 
               </xsl:for-each> 
					
            </table> 
         </body> 
      </html> 
   </xsl:template>  
</xsl:stylesheet>

Production

La balise <xsl: choose> spécifie plusieurs tests conditionnels par rapport au contenu des nœuds en conjonction avec les éléments <xsl: else> et <xsl: when>.

Déclaration

Voici la déclaration de syntaxe de <xsl:choose> élément.

<xsl:choose >
</xsl:choose>

Éléments

Nombre d'occurrences Illimité

Parent elements

xsl: attribut, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: sinon, xsl: param, xsl: processing-instruction, xsl: template, xsl: variable, xsl: when, xsl: with-param, éléments de sortie

Child elements

xsl: sinon, xsl: quand

Exemple de démonstration

Cet exemple crée une table d'élément <student> avec son attribut rollnoet son enfant <firstname>, <lastname>, <nickname> et <marks> en itérant sur chaque élève. Il vérifie puis imprime les détails de la note.

students.xml

<?xml version = "1.0"?> 
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?> 
<class> 
   <student rollno = "393"> 
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname> 
      <nickname>Dinkar</nickname> 
      <marks>85</marks> 
   </student> 
   <student rollno = "493"> 
      <firstname>Vaneet</firstname> 
      <lastname>Gupta</lastname> 
      <nickname>Vinni</nickname> 
      <marks>95</marks> 
   </student> 
   <student rollno = "593"> 
      <firstname>Jasvir</firstname> 
      <lastname>Singh</lastname> 
      <nickname>Jazz</nickname> 
      <marks>90</marks> 
   </student> 
</class>

students.xsl

<?xml version = "1.0" encoding = "UTF-8"?> 
<xsl:stylesheet version = "1.0" 
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">   
   <xsl:template match = "/"> 
      <html> 
         <body> 
            <h2>Students</h2> 
            <table border = "1"> 
               <tr bgcolor = "#9acd32"> 
                  <th>Roll No</th> 
                  <th>First Name</th> 
                  <th>Last Name</th> 
                  <th>Nick Name</th> 
                  <th>Marks</th> 
                  <th>Grade</th> 
               </tr> 
					
               <xsl:for-each select = "class/student"> 
					
                  <tr> 
                     <td><xsl:value-of select = "@rollno"/></td> 
                     <td><xsl:value-of select = "firstname"/></td> 
                     <td><xsl:value-of select = "lastname"/></td> 
                     <td><xsl:value-of select = "nickname"/></td> 
                     <td><xsl:value-of select = "marks"/></td> 
							
                     <td> 
                        <xsl:choose> 
                           <xsl:when test = "marks > 90"> 
                              High 
                           </xsl:when> 
									
                           <xsl:when test = "marks > 85"> 
                              Medium 
                           </xsl:when> 
									
                           <xsl:otherwise> 
                              Low 
                           </xsl:otherwise> 
                        </xsl:choose> 
                     </td> 
                  </tr> 
               </xsl:for-each> 
            </table> 
         </body> 
      </html> 
   </xsl:template>  
</xsl:stylesheet>

Production

L'élément de balise <xsl: key> spécifie une paire nom-valeur nommée affectée à un élément spécifique dans un document XML. Cette clé est utilisée avec la fonction key () dans les expressions XPath pour accéder aux éléments affectés dans un document XML.

Déclaration

Voici la déclaration de syntaxe de <xsl:key> élément.

<xsl:key 
   name = QName 
   match = Pattern 
   use = Expression > 
</xsl:key>

Les attributs

S. Non Nom et description
1

Name

Nom de la clé à utiliser.

2

Match

Modèles utilisés pour identifier un nœud contenant cette clé.

3

Use

Expression XPath pour identifier la valeur des nœuds du document xml.

Éléments

Number of Occurrences Illimité
Parent elements xsl: feuille de style
Child elements Aucun

Exemple de démonstration

Cet exemple crée une table d'élément <student> avec son attribut rollnoet son enfant <firstname>, <lastname>, <nickname> et <marks> en itérant sur chaque élève. Il vérifie que le prénom de la clé est l'un des noms de l'élève, puis imprime les détails de l'élève.

students.xml

<?xml version = "1.0"?> 
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?> 
<class> 
   <student rollno = "393"> 
      <firstname>Dinkar</firstname> 
      <lastname>Kad</lastname> 
      <nickname>Dinkar</nickname> 
      <marks>85</marks> 
   </student> 
   <student rollno = "493"> 
      <firstname>Vaneet</firstname> 
      <lastname>Gupta</lastname> 
      <nickname>Vinni</nickname> 
      <marks>95</marks> 
   </student> 
   <student rollno = "593"> 
      <firstname>Jasvir</firstname> 
      <lastname>Singh</lastname> 
      <nickname>Jazz</nickname> 
      <marks>90</marks> 
   </student> 
</class>

students.xsl

<xsl:stylesheet version = "1.0" 
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
   <xsl:key name = "firstname-search" match = "student" use = "firstname"/> 
   <xsl:template match = "/"> 
      <html> 
         <body> 
            <h2>Students</h2> 
            <table border = "1"> 
               <tr bgcolor = "#9acd32"> 
                  <th>Roll No</th> 
                  <th>First Name</th> 
                  <th>Last Name</th> 
                  <th>Nick Name</th> 
                  <th>Marks</th> 
               </tr> 
					
               <xsl:for-each select = "key('firstname-search', 'Dinkar')"> 
				
                  <tr> 
                     <td><xsl:value-of select = "@rollno"/></td> 
                     <td><xsl:value-of select = "firstname"/></td> 
                     <td><xsl:value-of select = "lastname"/></td> 
                     <td><xsl:value-of select = "nickname"/></td> 
                     <td><xsl:value-of select = "marks"/></td> 
                  </tr> 
					
               </xsl:for-each> 
            </table> 
         </body> 
      </html> 
   </xsl:template>  
</xsl:stylesheet>

Production

L'élément de balise <message> permet de déboguer un traitement XSLT. C'est similaire aux alertes javascript. La balise <xsl:> met en mémoire tampon un message vers le processeur XSLT qui met fin au traitement et envoie un message à l'application appelante pour afficher le message d'erreur.

Déclaration

Voici la déclaration de syntaxe de <xsl:message> élément.

<xsl:message 
   terminate = "yes" | "no" >
</xsl:message>

Les attributs

Sr.Non Nom et description
1

terminate

Il spécifie si la transformation doit se terminer lors de l'exécution de cette instruction ou non. La valeur par défaut est "oui".

Éléments

Nombre d'occurrences Illimité
Parent elements

xsl: attribut, xsl: commentaire, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: sinon, xsl: param, xsl: processinginstruction, xsl: template, xsl: variable, xsl: when, xsl: with-param, éléments de sortie

Child elements

xsl: apply-templates, xsl: attribute, xsl: call-template, xsl: choose, xsl: comment, xsl: copy, xsl: copy-of, xsl: element, xsl: for-each, xsl: if, xsl: instruction-de-traitement, xsl: texte, xsl: valeur-de, xsl: variable, éléments de sortie

Exemple de démonstration

Cet exemple crée une table d'élément <student> avec son attribut rollnoet son enfant <firstname>, <lastname>, <nickname> et <marks> en itérant sur chaque élève. Il vérifie la présence de la clé en tant que prénom, puis imprime les détails de l'élève, sinon affiche un message d'erreur.

students.xml

<?xml version = "1.0"?> 
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?> 
<class> 
   <student rollno = "393"> 
      <firstname>Dinkar</firstname> 
      <lastname>Kad</lastname> 
      <nickname>Dinkar</nickname> 
      <marks>85</marks> 
   </student> 
   <student rollno = "493"> 
      <firstname></firstname> 
      <lastname>Gupta</lastname> 
      <nickname>Vinni</nickname> 
      <marks>95</marks> 
   </student> 
   <student rollno = "593"> 
      <firstname>Jasvir</firstname> 
      <lastname>Singh</lastname> 
      <nickname>Jazz</nickname> 
      <marks>90</marks> 
   </student> 
</class>

students.xsl

<?xml version = "1.0" encoding = "UTF-8"?> 
<xsl:stylesheet version = "1.0" 
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">   
   <xsl:template match = "/"> 
      <html> 
         <body> 
            <h2>Students</h2> 
            <table border = "1"> 
               <tr bgcolor = "#9acd32"> 
                  <th>Roll No</th> 
                  <th>First Name</th> 
                  <th>Last Name</th> 
                  <th>Nick Name</th> 
                  <th>Marks</th> 
               </tr> 
					
               <xsl:for-each select = "class/student"> 
					
                  <xsl:if test = "firstname = ''"> 
                     <xsl:message terminate = "yes">A first name field is empty. 
                     </xsl:message> 
                  </xsl:if> 
					
                  <tr> 
                     <td><xsl:value-of select = "@rollno"/></td> 
                     <td><xsl:value-of select = "firstname"/></td> 
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td> 
                     <td><xsl:value-of select = "marks"/></td> 
                  </tr> 
               </xsl:for-each> 
            </table> 
         </body> 
      </html> 
   </xsl:template>
</xsl:stylesheet>

Production

La balise <xsl: apply-template> indique au processeur XSLT de trouver le modèle approprié à appliquer, en fonction du type et du contexte de chaque nœud sélectionné.

Déclaration

Voici la déclaration de syntaxe de <xsl:apply-template> élément.

<xsl:apply-template 
   select = Expression 
   mode = QName > 
</xsl:apply-template>

Les attributs

Sr.Non Nom et description
1

select

Utilisé pour traiter les nœuds sélectionnés par une expression XPath, au lieu de traiter tous les enfants.

2

mode

Permet à un élément tel que spécifié par ses noms qualifiés d'être traité plusieurs fois, produisant à chaque fois un résultat différent.

Éléments

Nombre d'occurrences Illimité

Parent elements

xsl: attribut, xsl: commentaire, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: sinon, xsl: param, xsl: processinginstruction, xsl: template, xsl: variable, xsl: when, xsl: with-param, éléments de sortie

Child elements

xsl: sort, xsl: avec-param

Exemple de démonstration

Cet exemple crée une liste d'élément <student> avec son attribut rollno et son enfant <firstname>, <lastname>, <nickname> et <marks> en itérant sur chaque élève.

students.xml

<?xml version = "1.0"?> 
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?> 
<class> 
   <student rollno = "393"> 
      <firstname>Dinkar</firstname> 
      <lastname>Kad</lastname> 
      <nickname>Dinkar</nickname> 
      <marks>85</marks> 
   </student> 
   <student rollno = "493"> 
      <firstname>Vaneet</firstname> 
      <lastname>Gupta</lastname> 
      <nickname>Vinni</nickname> 
      <marks>95</marks> 
   </student> 
   <student rollno = "593"> 
      <firstname>Jasvir</firstname> 
      <lastname>Singh</lastname> 
      <nickname>Jazz</nickname> 
      <marks>90</marks> 
   </student> 
</class>

students.xsl

<?xml version = "1.0" encoding = "UTF-8"?> 
<xsl:stylesheet version = "1.0" 
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">   
   <xsl:template match = "/"> 
      <html> 
         <body> 
            <h2>Students</h2> 
            <xsl:apply-templates select = "class/student" /> 
         </body> 
      </html> 
   </xsl:template>  

   <xsl:template match = "class/student"> 
      <xsl:apply-templates select = "@rollno" /> 
      <xsl:apply-templates select = "firstname" /> 
      <xsl:apply-templates select = "lastname" /> 
      <xsl:apply-templates select = "nickname" /> 
      <xsl:apply-templates select = "marks" /> 
      <br /> 
   </xsl:template>  

   <xsl:template match = "@rollno"> 
      <span style = "font-size = 22px;"> 
         <xsl:value-of select = "." /> 
      </span> 
      <br /> 
   </xsl:template>  

   <xsl:template match = "firstname"> 
      First Name:<span style = "color:blue;"> 
         <xsl:value-of select = "." /> 
      </span> 
      <br /> 
   </xsl:template>  

   <xsl:template match = "lastname"> 
      Last Name:<span style = "color:green;"> 
         <xsl:value-of select = "." /> 
      </span> 
      <br /> 
   </xsl:template>  

   <xsl:template match = "nickname"> 
      Nick Name:<span style = "color:red;"> 
         <xsl:value-of select = "." /> 
      </span> 
      <br /> 
   </xsl:template>  

   <xsl:template match = "marks"> 
      Marks:<span style = "color:gray;"> 
         <xsl:value-of select = "." /> 
      </span> 
      <br /> 
   </xsl:template>  
	
</xsl:stylesheet>

Production

La balise <xsl: import> importe le contenu d'une feuille de style dans une autre. L'importation d'une feuille de style a une priorité plus élevée sur la feuille de style importée.

Déclaration

Voici la déclaration de syntaxe de <xsl:import> élément.

<xsl:import href = "uri"> 
</xsl:import>

Les attributs

Sr.Non Nom et description
1.

href

utilisé pour passer le chemin de la feuille de style xslt à importer

.

Éléments

Number of occurrences Illimité
Parent elements xsl: feuille de style, xsl: transform
Child elements aucun

Exemple de démonstration

Cet exemple crée une liste d'élément <student> avec son attribut rollnoet son enfant <firstname>, <lastname>, <nickname> et <marks> en itérant sur chaque élève. Ici, nous avons créé deux feuilles de style xsl où la feuille de style étudiants_imports.xsl importe étudiants.xsl et étudiants.xml est lié à étudiants_imports.xsl.

students.xml

<?xml version = "1.0"?> 
<?xml-stylesheet type = "text/xsl" href = "students_imports.xsl"?> 
<class> 
   <student rollno = "393">
      <firstname>Dinkar</firstname> 
      <lastname>Kad</lastname> 
      <nickname>Dinkar</nickname> 
      <marks>85</marks> 
   </student> 
   <student rollno = "493"> 
      <firstname>Vaneet</firstname> 
      <lastname>Gupta</lastname> 
      <nickname>Vinni</nickname> 
      <marks>95</marks> 
   </student> 
   <student rollno = "593"> 
      <firstname>Jasvir</firstname> 
      <lastname>Singh</lastname> 
      <nickname>Jazz</nickname> 
      <marks>90</marks> 
   </student> 
</class>

students.xsl

<?xml version = "1.0" encoding = "UTF-8"?> 
<xsl:stylesheet version = "1.0" 
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">    
   <xsl:template match = "/"> 
      <html> 
         <body> 
            <h2>Students</h2> 
            <table border = "1"> 
               <tr bgcolor = "#9acd32"> 
                  <th>Roll No</th> 
                  <th>First Name</th> 
                  <th>Last Name</th> 
                  <th>Nick Name</th> 
                  <th>Marks</th> 
               </tr> 
					
               <xsl:for-each select = "class/student"> 
					
                  <tr> 
                     <td><xsl:value-of select = "@rollno"/></td> 
                     <td><xsl:value-of select = "firstname"/></td> 
                     <td><xsl:value-of select = "lastname"/></td> 
                     <td><xsl:value-of select = "nickname"/></td> 
                     <td><xsl:value-of select = "marks"/></td> 
                  </tr> 
               </xsl:for-each> 
            </table> 
         </body> 
      </html> 
   </xsl:template>  
</xsl:stylesheet>

students_imports.xsl

<?xml version = "1.0" encoding = "UTF-8"?> 
<xsl:stylesheet version = "1.0" 
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">  
   <xsl:import href = "students.xsl"/>  
   <xsl:template match = "/"> 
      <xsl:apply-imports/> 
   </xsl:template>  
</xsl:stylesheet>

Production