Guía rápida XSLT

XSL

Antes de aprender XSLT, primero debemos entender XSL que significa EXtensible Styleheet Language. Es similar a XML como CSS es a HTML.

Necesidad de XSL

En el caso de un documento HTML, las etiquetas están predefinidas, como table, div y span; y el navegador sabe cómo agregarles estilo y mostrar los que usan estilos CSS. Pero en el caso de los documentos XML, las etiquetas no están predefinidas. Para comprender y diseñar un documento XML, el World Wide Web Consortium (W3C) desarrolló XSL que puede actuar como lenguaje de hoja de estilo basado en XML. Un documento XSL especifica cómo un navegador debe representar un documento XML.

Las siguientes son las partes principales de XSL:

  • XSLT - utilizado para transformar documentos XML en varios otros tipos de documentos.

  • XPath - utilizado para navegar por documentos XML.

  • XSL-FO - utilizado para formatear documentos XML.

Que es XSLT

XSLT, Transformaciones de lenguaje de hoja de estilo extensible, brinda la capacidad de transformar datos XML de un formato a otro automáticamente.

Cómo funciona XSLT

Se utiliza una hoja de estilo XSLT para definir las reglas de transformación que se aplicarán en el documento XML de destino. La hoja de estilo XSLT está escrita en formato XML. El procesador XSLT toma la hoja de estilo XSLT y aplica las reglas de transformación en el documento XML de destino y luego genera un documento formateado en formato XML, HTML o de texto. Luego, el formateador XSLT utiliza este documento formateado para generar la salida real que se mostrará al usuario final.

Ventajas

Estas son las ventajas de usar XSLT:

  • Independiente de la programación. Las transformaciones se escriben en un archivo xsl separado que es nuevamente un documento XML.

  • La salida se puede alterar simplemente modificando las transformaciones en el archivo xsl. No es necesario cambiar ningún código. Por lo tanto, los diseñadores web pueden editar la hoja de estilo y ver el cambio en la salida rápidamente.

Supongamos que tenemos el siguiente archivo XML de muestra, Students.xml, que debe transformarse en un documento HTML bien formateado.

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>

Necesitamos definir un documento de hoja de estilo XSLT para que el documento XML anterior cumpla con los siguientes criterios:

  • La página debe tener un título Students.

  • La página debe tener una tabla con los detalles de los estudiantes.

  • Las columnas deben tener los siguientes encabezados: Roll No, First Name, Last Name, Nick Name, Marks

  • La tabla debe contener los detalles de los estudiantes en consecuencia.

Paso 1: crear un documento XSLT

Cree un documento XSLT para cumplir con los requisitos anteriores, asígnele el nombre Students.xsl y guárdelo en la misma ubicación donde se encuentra Students.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>

Paso 2: vincular el documento XSLT al documento XML

Actualice el documento student.xml con la siguiente etiqueta de hoja de estilo xml. Establecer el valor href en estudiantes.xsl

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

Paso 3: Ver el documento XML en 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>

Salida

<xsl: template> define una forma de reutilizar plantillas para generar la salida deseada para los nodos de un tipo / contexto particular.

Declaración

A continuación se muestra la declaración de sintaxis de <xsl:template> elemento.

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

Atributos

No Señor Nombre y descripción
1

name

Nombre del elemento sobre el que se aplicará la plantilla.

2

match

Patrón que significa los elementos sobre los que se aplicará la plantilla.

3

priority

Número de prioridad de una plantilla. La plantilla coincidente con baja prioridad no se considera delante de la plantilla de alta prioridad.

4

mode

Permite que el elemento se procese varias veces para producir un resultado diferente cada vez.

Elementos

Numero de incidentes Ilimitado

Parent elements

xsl: hoja de estilo, xsl: transform

Child elements

xsl: aplicar-importaciones, xsl: aplicar-plantillas, xsl: atributo, xsl: plantilla de llamada, xsl: elegir, xsl: comentario, xsl: copiar, xsl: copia de, xsl: elemento, xsl: respaldo, xsl: para cada, xsl: if, xsl: mensaje, xsl: número, xsl: param, xsl: instrucción-procesamiento, xsl: texto, xsl: valor de, xsl: variable, elementos de salida

Ejemplo de demostración

Esta regla de plantilla tiene un patrón que identifica los elementos <student> y produce una salida en formato tabular.

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>

Salida

La etiqueta <xsl: value-of> coloca el valor del nodo seleccionado según la expresión XPath, como texto.

Declaración

A continuación se muestra la declaración de sintaxis de <xsl:value-of> elemento.

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

Atributos

No Señor Nombre y descripción
1

Select

Expresión XPath para ser evaluada en el contexto actual.

2

disable-outputescaping

Predeterminado: "no". Si es "sí", el texto de salida no escapará de los caracteres xml del texto.

Elementos

Numero de incidentes Ilimitado

Parent elements

xsl: atributo, xsl: comentario, xsl: copia, xsl: elemento, xsl: respaldo, xsl: para cada uno, xsl: if, xsl: mensaje, xsl: de lo contrario, xsl: param, xsl: instrucción de procesamiento, xsl: plantilla , xsl: variable, xsl: when, xsl: with-param, elementos de salida

Child elements

Ninguna

Ejemplo de demostración

Este ejemplo crea una tabla del elemento <student> con su atributo rollno y su hijo <firstname>, <lastname>, <nickname> y <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>

Verificar la salida

La etiqueta <xsl: for-each> aplica una plantilla repetidamente para cada nodo.

Declaración

A continuación se muestra la declaración de sintaxis de <xsl:for-each> elemento

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

Atributos

No Señor Nombre y descripción
1

Select

Expresión XPath que se evaluará en el contexto actual para determinar el conjunto de nodos que se iterarán.

Elementos

Numero de incidentes Ilimitado

Parent elements

xsl: atributo, xsl: comentario, xsl: copia, xsl: elemento, xsl: respaldo, xsl: foreach, xsl: if, xsl: mensaje, xsl: de lo contrario, xsl: param, xsl: instrucción de procesamiento, xsl: plantilla, xsl: variable, xsl: when, xsl: with-param, elementos de salida.

Child elements

xsl: aplicar-importaciones, xsl: aplicar-plantillas, xsl: atributo, xsl: plantilla de llamada, xsl: elegir, xsl: comentario, xsl: copiar, xsl: copia de, xsl: elemento, xsl: respaldo, xsl: para cada uno, xsl: if, xsl: mensaje, xsl: número, xsl: instrucción-procesamiento, xsl: ordenar, xsl: texto, xsl: valor de, xsl: variable.

Ejemplo de demostración

Este ejemplo crea una tabla del elemento <student> con su atributo rollno y su hijo <firstname>,<lastname> <nickname> y <marks> iterando sobre cada alumno.

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>

Salida

La etiqueta <xsl: sort> especifica un criterio de clasificación en los nodos.

Declaración

A continuación se muestra la declaración de sintaxis de <xsl:sort> elemento.

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

Atributos

No Señor Nombre y descripción
1

select

Clave de clasificación del nodo.

2

lang

Alfabeto del idioma utilizado para determinar el orden de clasificación.

3

data-type

Tipo de datos del texto.

4

order

Orden de clasificación. El valor predeterminado es "ascendente".

5

case-order

Orden de clasificación de la cadena por capitalización. El valor predeterminado es "primero superior".

Elementos

Number of occurrences Ilimitado
Parent elements xsl: aplicar-plantillas, xsl: para cada uno
Child elements Ninguna

Ejemplo de demostración

Este ejemplo crea una tabla del elemento <student> con su atributo rollno y su hijo <firstname>, <lastname>, <nickname> y <marks> iterando sobre cada estudiante, clasifíquelos por nombre.

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>

Salida

La etiqueta <xsl: if> especifica una prueba condicional contra el contenido de los nodos.

Declaración

A continuación se muestra la declaración de sintaxis de <xsl:if> elemento.

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

Atributos

No Señor Nombre y descripción
1

test

La condición en los datos xml para probar.

Elementos

Numero de incidentes Ilimitado

Parent elements

xsl: atributo, xsl: comentario, xsl: copia, xsl: elemento, xsl: respaldo, xsl: para cada uno, xsl: if, xsl: mensaje, xsl: de lo contrario, xsl: param, xsl: instrucción-procesamiento, xsl: plantilla, xsl: variable, xsl: when, xsl: with-param, elementos de salida

Child elements

xsl: aplicar-plantillas, xsl: atributo, xsl: plantilla de llamada, xsl: elegir, xsl: comentario, xsl: copiar, xsl: copia de, xsl: elemento, xsl: para cada uno, xsl: if, xsl: instrucción-de-procesamiento, xsl: texto, xsl: valor de, xsl: variable, elementos de salida

Ejemplo de demostración

Este ejemplo crea una tabla del elemento <student> con su atributo rollnoy su hijo <firstname>, <lastname>, <nickname> y <marks> iterando sobre cada alumno. Verifica que las marcas sean superiores a 90 y luego imprime los detalles de los estudiantes.

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>

Salida

La etiqueta <xsl: choose> especifica varias pruebas condicionales contra el contenido de los nodos junto con los elementos <xsl: else> y <xsl: when>.

Declaración

A continuación se muestra la declaración de sintaxis de <xsl:choose> elemento.

<xsl:choose >
</xsl:choose>

Elementos

Numero de incidentes Ilimitado

Parent elements

xsl: atributo, xsl: comentario, xsl: copia, xsl: elemento, xsl: respaldo, xsl: para cada uno, xsl: if, xsl: mensaje, xsl: de lo contrario, xsl: param, xsl: instrucción-procesamiento, xsl: plantilla, xsl: variable, xsl: when, xsl: with-param, elementos de salida

Child elements

xsl: de lo contrario, xsl: cuando

Ejemplo de demostración

Este ejemplo crea una tabla del elemento <student> con su atributo rollnoy su hijo <firstname>, <lastname>, <nickname> y <marks> iterando sobre cada alumno. Comprueba y luego imprime los detalles de la calificación.

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>

Salida

El elemento de etiqueta <xsl: key> especifica un par nombre-valor con nombre asignado a un elemento específico en un documento XML. Esta clave se usa con la función key () en expresiones XPath para acceder a los elementos asignados en un documento XML.

Declaración

A continuación se muestra la declaración de sintaxis de <xsl:key> elemento.

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

Atributos

S. No Nombre y descripción
1

Name

Nombre de la clave que se utilizará.

2

Match

Patrones utilizados para identificar un nodo que contiene esta clave.

3

Use

Expresión XPath para identificar el valor de los nodos del documento xml.

Elementos

Number of Occurrences Ilimitado
Parent elements xsl: hoja de estilo
Child elements Ninguna

Ejemplo de demostración

Este ejemplo crea una tabla del elemento <student> con su atributo rollnoy su hijo <firstname>, <lastname>, <nickname> y <marks> iterando sobre cada alumno. Verifica que la clave como nombre sea uno de los nombres del estudiante y luego imprime los detalles del estudiante.

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>

Salida

El elemento de etiqueta <message> ayuda a depurar un procesamiento XSLT. Es similar a las alertas de JavaScript. La etiqueta <xsl:> almacena un mensaje en el procesador XSLT que termina el procesamiento y envía un mensaje a la aplicación que llama para mostrar el mensaje de error.

Declaración

A continuación se muestra la declaración de sintaxis de <xsl:message> elemento.

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

Atributos

No Señor Nombre y descripción
1

terminate

Especifica si la transformación debe terminar al ejecutar esta instrucción o no. El valor predeterminado es "sí".

Elementos

Numero de incidentes Ilimitado
Parent elements

xsl: atributo, xsl: comentario, xsl: copia, xsl: elemento, xsl: respaldo, xsl: foreach, xsl: if, xsl: mensaje, xsl: de lo contrario, xsl: param, xsl: instrucción de procesamiento, xsl: plantilla, xsl: variable, xsl: when, xsl: with-param, elementos de salida

Child elements

xsl: aplicar-plantillas, xsl: atributo, xsl: plantilla de llamada, xsl: elegir, xsl: comentario, xsl: copiar, xsl: copia de, xsl: elemento, xsl: para cada uno, xsl: if, xsl: instrucción-de-procesamiento, xsl: texto, xsl: valor de, xsl: variable, elementos de salida

Ejemplo de demostración

Este ejemplo crea una tabla del elemento <student> con su atributo rollnoy su hijo <firstname>, <lastname>, <nickname> y <marks> iterando sobre cada alumno. Comprueba que la clave como nombre esté presente y luego imprime los detalles del estudiante; de ​​lo contrario, muestra un mensaje de error.

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>

Salida

La etiqueta <xsl: apply-template> indica al procesador XSLT que encuentre la plantilla adecuada para aplicar, según el tipo y contexto de cada nodo seleccionado.

Declaración

A continuación se muestra la declaración de sintaxis de <xsl:apply-template> elemento.

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

Atributos

No Señor Nombre y descripción
1

select

Se utiliza para procesar los nodos seleccionados por una expresión XPath, en lugar de procesar todos los hijos.

2

mode

Permite que un elemento, según lo especificado por sus nombres calificados, se procese varias veces, produciendo cada vez un resultado diferente.

Elementos

Numero de incidentes Ilimitado

Parent elements

xsl: atributo, xsl: comentario, xsl: copia, xsl: elemento, xsl: respaldo, xsl: foreach, xsl: if, xsl: mensaje, xsl: de lo contrario, xsl: param, xsl: instrucción de procesamiento, xsl: plantilla, xsl: variable, xsl: when, xsl: with-param, elementos de salida

Child elements

xsl: ordenar, xsl: con-param

Ejemplo de demostración

Este ejemplo crea una lista de elementos <student> con su atributo rollno y su hijo <firstname>, <lastname>, <nickname> y <marks> iterando sobre cada alumno.

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>

Salida

La etiqueta <xsl: import> importa el contenido de una hoja de estilo a otra. Importar una hoja de estilo tiene mayor prioridad que una hoja de estilo importada.

Declaración

A continuación se muestra la declaración de sintaxis de <xsl:import> elemento.

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

Atributos

No Señor Nombre y descripción
1.

href

utilizado para pasar la ruta de la hoja de estilo xslt que se va a importar

.

Elementos

Number of occurrences Ilimitado
Parent elements xsl: hoja de estilo, xsl: transform
Child elements ninguna

Ejemplo de demostración

Este ejemplo crea una lista de elementos <student> con su atributo rollnoy su hijo <firstname>, <lastname>, <nickname> y <marks> iterando sobre cada alumno. Aquí hemos creado dos hojas de estilo xsl donde la hoja de estilo Students_imports.xsl importa Students.xsl y Students.xml está vinculada a Students_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>

Salida