Guia rápido de XSLT
XSL
Antes de aprender XSLT, devemos primeiro entender XSL que significa EXtensível Sfolha de papel Llinguagem. É semelhante ao XML como o CSS é ao HTML.
Necessidade de XSL
No caso de documento HTML, as tags são predefinidas, como table, div e span; e o navegador sabe como adicionar estilo a eles e exibi-los usando estilos CSS. Mas, no caso de documentos XML, as tags não são predefinidas. Para entender e definir o estilo de um documento XML, o World Wide Web Consortium (W3C) desenvolveu o XSL que pode atuar como linguagem de folha de estilo baseada em XML. Um documento XSL especifica como um navegador deve processar um documento XML.
A seguir estão as partes principais do XSL -
XSLT - usado para transformar um documento XML em vários outros tipos de documento.
XPath - usado para navegar no documento XML.
XSL-FO - usado para formatar documentos XML.
O que é XSLT
XSLT, Extensible Stylesheet Language Transformations, oferece a capacidade de transformar dados XML de um formato para outro automaticamente.
Como funciona o XSLT
Uma folha de estilo XSLT é usada para definir as regras de transformação a serem aplicadas no documento XML de destino. A folha de estilo XSLT é escrita no formato XML. O Processador XSLT pega a folha de estilo XSLT e aplica as regras de transformação no documento XML de destino e, em seguida, gera um documento formatado na forma de XML, HTML ou formato de texto. Esse documento formatado é então utilizado pelo formatador XSLT para gerar a saída real que deve ser exibida ao usuário final.
Vantagens
Aqui estão as vantagens de usar XSLT -
Independente de programação. As transformações são gravadas em um arquivo xsl separado, que é novamente um documento XML.
A saída pode ser alterada simplesmente modificando as transformações no arquivo xsl. Não há necessidade de alterar nenhum código. Assim, os Web designers podem editar a folha de estilo e ver a mudança na saída rapidamente.
Vamos supor que temos o seguinte arquivo XML de amostra, students.xml, que deve ser transformado em um documento HTML bem formatado.
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>
Precisamos definir um documento de folha de estilo XSLT para o documento XML acima para atender aos seguintes critérios -
A página deve ter um título Students.
A página deve ter uma tabela de detalhes do aluno.
As colunas devem ter os seguintes cabeçalhos: Roll No, First Name, Last Name, Nick Name, Marks
A tabela deve conter detalhes dos alunos em conformidade.
Etapa 1: Criar documento XSLT
Crie um documento XSLT para atender aos requisitos acima, nomeie-o como students.xsl e salve-o no mesmo local onde se encontra o 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>
Etapa 2: vincular o documento XSLT ao documento XML
Atualize o documento student.xml com a seguinte tag xml-stylesheet. Defina o valor href para students.xsl
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
...
</class>
Etapa 3: Visualize o documento XML no 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>
Resultado
<xsl: template> define uma maneira de reutilizar os modelos para gerar a saída desejada para nós de um determinado tipo / contexto.
Declaração
A seguir está a declaração de sintaxe de <xsl:template> elemento.
<xsl:template
name = Qname
match = Pattern
priority = number
mode = QName >
</xsl:template>
Atributos
Sr. Não | Nome e Descrição |
---|---|
1 | name Nome do elemento no qual o modelo deve ser aplicado. |
2 | match Padrão que significa o (s) elemento (s) nos quais o modelo deve ser aplicado. |
3 | priority Número de prioridade de um modelo. O modelo de correspondência com baixa prioridade não é considerado na frente do modelo de alta prioridade. |
4 | mode Permite que o elemento seja processado várias vezes para produzir um resultado diferente a cada vez. |
Elementos
Número de ocorrências | Ilimitado |
---|---|
Parent elements |
xsl: folha de estilo, xsl: transformar |
Child elements |
xsl: aplicar-importações, xsl: aplicar-modelos, xsl: atributo, xsl: modelo de chamada, xsl: escolher, xsl: comentário, xsl: copiar, xsl: copiar-de, xsl: elemento, xsl: substituto, xsl: para-cada, xsl: if, xsl: mensagem, xsl: número, xsl: param, xsl: instrução de processamento, xsl: texto, xsl: valor de, xsl: variável, elementos de saída |
Exemplo de demonstração
Esta regra de modelo tem um padrão que identifica os elementos <student> e produz uma saída em 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>
Resultado
A tag <xsl: value-of> coloca o valor do nó selecionado de acordo com a expressão XPath, como texto.
Declaração
A seguir está a declaração de sintaxe de <xsl:value-of> elemento.
<xsl:value-of
select = Expression
disable-output-escaping = "yes" | "no" >
</xsl:value-of>
Atributos
Sr. Não | Nome e Descrição |
---|---|
1 | Select Expressão XPath a ser avaliada no contexto atual. |
2 | disable-outputescaping Padrão- "não". Se "sim", o texto de saída não escapará dos caracteres xml do texto. |
Elementos
Número de ocorrências | Ilimitado |
---|---|
Parent elements |
xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: else, xsl: param, xsl: instrução de processamento, xsl: template , xsl: variável, xsl: quando, xsl: with-param, elementos de saída |
Child elements |
Nenhum |
Exemplo de demonstração
Este exemplo cria uma tabela do elemento <student> com seu atributo rollno e seu filho <firstname>, <lastname>, <nickname> e <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>
Verifique a saída
A tag <xsl: for-each> aplica um modelo repetidamente para cada nó.
Declaração
A seguir está a declaração de sintaxe de <xsl:for-each> elemento
<xsl:for-each
select = Expression >
</xsl:for-each>
Atributos
Sr. Não | Nome e Descrição |
---|---|
1 | Select Expressão XPath a ser avaliada no contexto atual para determinar o conjunto de nós a ser iterado. |
Elementos
Número de ocorrências | Ilimitado |
---|---|
Parent elements |
xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: else, xsl: param, xsl: processinginstruction, xsl: template, xsl: variável, xsl: quando, xsl: with-param, elementos de saída. |
Child elements |
xsl: aplicar-importações, xsl: aplicar-modelos, xsl: atributo, xsl: modelo de chamada, xsl: escolher, xsl: comentário, xsl: copiar, xsl: copiar-de, xsl: elemento, xsl: substituto, xsl: para-each, xsl: if, xsl: mensagem, xsl: número, xsl: instrução de processamento, xsl: classificar, xsl: texto, xsl: valor de, xsl: variável. |
Exemplo de demonstração
Este exemplo cria uma tabela de elemento <student> com seu atributo rollno e seu filho <firstname>,<lastname> <nickname> e <marks> iterando sobre cada aluno.
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>
Resultado
A tag <xsl: sort> especifica um critério de classificação nos nós.
Declaração
A seguir está a declaração de sintaxe 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
Sr. Não | Nome e Descrição |
---|---|
1 | select Chave de classificação do nó. |
2 | lang Alfabeto do idioma usado para determinar a ordem de classificação. |
3 | data-type Tipo de dados do texto. |
4 | order Ordem de classificação. O padrão é "crescente". |
5 | case-order Ordem de classificação da string por letras maiúsculas. O padrão é "superior primeiro". |
Elementos
Number of occurrences | Ilimitado |
Parent elements | xsl: apply-templates, xsl: for-each |
Child elements | Nenhum |
Exemplo de demonstração
Este exemplo cria uma tabela do elemento <student> com seu atributo rollno e seu filho <firstname>, <lastname>, <nickname> e <marks> iterando sobre cada aluno, classificando-os pelo primeiro nome.
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>
Resultado
A tag <xsl: if> especifica um teste condicional em relação ao conteúdo dos nós.
Declaração
A seguir está a declaração de sintaxe de <xsl:if> elemento.
<xsl:if
test = boolean-expression >
</xsl:if>
Atributos
Sr. Não | Nome e Descrição |
---|---|
1 | test A condição nos dados xml a serem testados. |
Elementos
Número de ocorrências | Ilimitado |
---|---|
Parent elements |
xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: caso contrário, xsl: param, xsl: processing-instrução, xsl: template, xsl: variable, xsl: when, xsl: with-param, elementos de saída |
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: instrução de processamento, xsl: texto, xsl: valor de, xsl: variável, elementos de saída |
Exemplo de demonstração
Este exemplo cria uma tabela do elemento <student> com seu atributo rollnoe seu filho <firstname>, <lastname>, <nickname> e <marks> iterando sobre cada aluno. Ele marca as marcas para ser maior que 90 e, em seguida, imprime os detalhes do (s) aluno (s).
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>
Resultado
A tag <xsl: choose> especifica vários testes condicionais em relação ao conteúdo dos nós em conjunto com os elementos <xsl: else> e <xsl: when>.
Declaração
A seguir está a declaração de sintaxe de <xsl:choose> elemento.
<xsl:choose >
</xsl:choose>
Elementos
Número de ocorrências | Ilimitado |
---|---|
Parent elements |
xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: for-each, xsl: if, xsl: message, xsl: caso contrário, xsl: param, xsl: processing-instrução, xsl: template, xsl: variable, xsl: when, xsl: with-param, elementos de saída |
Child elements |
xsl: caso contrário, xsl: quando |
Exemplo de demonstração
Este exemplo cria uma tabela do elemento <student> com seu atributo rollnoe seu filho <firstname>, <lastname>, <nickname> e <marks> iterando sobre cada aluno. Ele verifica e imprime os detalhes da nota.
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>
Resultado
O elemento de tag <xsl: key> especifica um par nome-valor nomeado atribuído a um elemento específico em um documento XML. Essa chave é usada com a função key () em expressões XPath para acessar os elementos atribuídos em um documento XML.
Declaração
A seguir está a declaração de sintaxe de <xsl:key> elemento.
<xsl:key
name = QName
match = Pattern
use = Expression >
</xsl:key>
Atributos
S.No | Nome e Descrição |
---|---|
1 | Name Nome da chave a ser usada. |
2 | Match Padrões usados para identificar um nó que contém essa chave. |
3 | Use Expressão XPath para identificar o valor dos nós do documento xml. |
Elementos
Number of Occurrences | Ilimitado |
Parent elements | xsl: folha de estilo |
Child elements | Nenhum |
Exemplo de demonstração
Este exemplo cria uma tabela do elemento <student> com seu atributo rollnoe seu filho <firstname>, <lastname>, <nickname> e <marks> iterando sobre cada aluno. Ele verifica a chave como primeiro nome para ser um dos nomes do aluno e, em seguida, imprime os detalhes do aluno.
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>
Resultado
O elemento de tag <message> ajuda a depurar um processamento XSLT. É semelhante aos alertas de javascript. A tag <xsl:> armazena em buffer uma mensagem para o processador XSLT que termina o processamento e envia uma mensagem ao aplicativo do chamador para exibir a mensagem de erro.
Declaração
A seguir está a declaração de sintaxe de <xsl:message> elemento.
<xsl:message
terminate = "yes" | "no" >
</xsl:message>
Atributos
Sr. Não | Nome e Descrição |
---|---|
1 | terminate Ele especifica se a transformação deve terminar após a execução desta instrução ou não. O padrão é "sim". |
Elementos
Número de ocorrências | Ilimitado |
---|---|
Parent elements | xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: else, xsl: param, xsl: processinginstruction, xsl: template, xsl: variável, xsl: quando, xsl: with-param, elementos de saída |
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: instrução de processamento, xsl: texto, xsl: valor de, xsl: variável, elementos de saída |
Exemplo de demonstração
Este exemplo cria uma tabela do elemento <student> com seu atributo rollnoe seu filho <firstname>, <lastname>, <nickname> e <marks> iterando sobre cada aluno. Ele verifica a presença da chave como primeiro nome e depois imprime os detalhes do aluno; caso contrário, exibe uma mensagem de erro.
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>
Resultado
A tag <xsl: apply-template> sinaliza ao processador XSLT para encontrar o modelo apropriado a ser aplicado, com base no tipo e contexto de cada nó selecionado.
Declaração
A seguir está a declaração de sintaxe de <xsl:apply-template> elemento.
<xsl:apply-template
select = Expression
mode = QName >
</xsl:apply-template>
Atributos
Sr. Não | Nome e Descrição |
---|---|
1 | select Usado para processar nós selecionados por uma expressão XPath, em vez de processar todos os filhos. |
2 | mode Permite que um elemento, conforme especificado por seus Nomes qualificados, seja processado várias vezes, cada vez produzindo um resultado diferente. |
Elementos
Número de ocorrências | Ilimitado |
---|---|
Parent elements |
xsl: attribute, xsl: comment, xsl: copy, xsl: element, xsl: fallback, xsl: foreach, xsl: if, xsl: message, xsl: else, xsl: param, xsl: processinginstruction, xsl: template, xsl: variável, xsl: quando, xsl: with-param, elementos de saída |
Child elements |
xsl: sort, xsl: with-param |
Exemplo de demonstração
Este exemplo cria uma lista de elemento <student> com seu atributo rollno e seu filho <firstname>, <lastname>, <nickname> e <marks> iterando sobre cada aluno.
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>
Resultado
A tag <xsl: import> importa o conteúdo de uma folha de estilo para outra. A importação de uma folha de estilo tem maior precedência sobre a folha de estilo importada.
Declaração
A seguir está a declaração de sintaxe de <xsl:import> elemento.
<xsl:import href = "uri">
</xsl:import>
Atributos
Sr. Não | Nome e Descrição |
---|---|
1 | href usado para passar o caminho da folha de estilo xslt a ser importada . |
Elementos
Number of occurrences | Ilimitado |
Parent elements | xsl: folha de estilo, xsl: transformar |
Child elements | Nenhum |
Exemplo de demonstração
Este exemplo cria uma lista de elemento <student> com seu atributo rollnoe seu filho <firstname>, <lastname>, <nickname> e <marks> iterando sobre cada aluno. Aqui, criamos duas folhas de estilo xsl onde a folha de estilo students_imports.xsl importa students.xsl e students.xml está vinculado 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>