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>