De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Otávio Augusto Bizetto Penatti
Data de Publicação: 15 de Março de 2005
Este tutorial é uma tradução do tutorial de XSLT da W3Schools, disponível em http://www.w3schools.com/xsl/default.asp
Em nosso tutorial de XSLT você irá aprender o que é o XSLT. Você aprenderá como usar o XSLT para transformar documentos XML em outros formatos XML, como o XHTML.
Começou com XSL e terminou com XSLT, XPath and XSL-FO.
XSL é abreviação de eXtensible Stylesheet Language (Linguagem de Folha de Estilos Extensível).
O World Wide Web Consortium (W3C) começou a desenvolver o XSL porque havia uma necessidade linguagem de filha de estilos baseada em XML.
HTML usa tags predefinidas e os significados das tags são "entendíveis".
O elemento <table> define uma tabela e o browser sabe como mostrá-la.
Adicionar estilos à elementos HTML também é simples. Dizer para um browser para mostrar um elemento com uma certa fonte ou cor é fácilmente feito com CSS.
XML não usa tags predefinidas (as tags podem ser ao "gosto do freguês") e os significados dessas tags são não "interpretáveis".
A tag <table> pode significar uma tabela HTML ou um móvel, e o browser não sabe como mostrá-la.
Deve haver algo então, que adicionado ao documento XML, descreve como o documento deve ser mostrado; e isso é o XSL!
XSL consiste de 3 partes:
Pense em XSL como um conjunto de linguagens que podem transformar XML em XHTML, filtrar e ordenar dados XML, definir partes de um documento XML, formatar dados XML baseados nos valores dos dados, como mostrar valores negativos em vermelho, e exportar dados XML para mídias diferentes, como telas, papel ou voz.
O resto do tutorial é sobre XSLT - a linguagem para transformar documentos XML.
Mas você também pode estudar nosso Tutorial XPath (em inglês ou português), Tutorial XSL-FO, W3C XSL activities
XSLT é uma linguagem para transformar documentos XML em outros documentos XML.
XPath é uma linguagem para definir partes de um documento XML.
Antes de estudar XSLT você deve saber o básico de XML e XML Namespaces.
Se você quer estudar esses assuntos antes, por favor leia nosso Tutorial XML.
XSLT é a parte mais importante dos padrões XSL. Ele é a parte do XSL usada para transformar um documento XML em outro documento XML, ou um outro tipo de documento que é reconhecido por um browser, como HTML e XHTML. Normalmente XSLT faz isso transformando cada elemento XML em um elemento (X)HTML.
XSLT também pode adicionar novos elementos no arquivo de saída, ou remover elementos. Ele pode rearranjar e ordenar elementos, testar e tomar decisões sobre quais elementos mostrar, e muito mais.
Um modo comum de descrever o processo de transformação é dizer que o XSLT transforma uma árvore de origem XML em uma árvore de resultado XML.
XSLT usa o XPath para definir os padrões combinantes para as transformações.
Se você quiser estudar XPath primeiro, por favor leia o nosso Tutorial de XPath.
No processo de transformação, XSLT usa XPath para definir partes do documento de origem que combinam com um ou mais moldes. Quando uma combinação é encontrada, XSLT transformará a parte combinante do documento de origem no documento de resultado. As partes do documento de origem que não combinam com um molde permanecerão sem modificações no documento de resultado.
XSLT tornou-se uma Recomendação W3C em 16 de Novembro de 1999.
Para ler mais sobre as atividades XSLT na W3C por favor leia o nosso Tutorial W3C
Não são todos os browsers de Internet que têm suporte completo ao XSLT.
XSLT no Internet Explorer 5 NÃO é compatível com a Recomendação Oficial W3C XSL.
Quando o Internet Explorer 5 foi liberado em Março de 1999, o padrão XSLT ainda era um rascunho da W3C.
Como a Recomendação final W3C XSL é diferente do rascunho, o suporte para XSL no IE 5 não é 100% compatível com a Recomendação Oficial XSLT.
Esta restrição aplica-se para ambos IE 5 e IE 5.5.
Internet Explorer 6 tem suporte completo à Recomendação Oficial W3C XSLT.
O XML Parser 3.0 - lançado com o Internet Explorer 6 e o Windows XP - é baseado em ambas Recomendações W3C XSLT 1.0 e W3C XPath 1.0.
Se você realmente quer aprender XSLT você deve atualizar para o Internet Explorer 6.0.
Netscape 6 não suporta completamente a Recomendação Oficial W3C XSLT. Contudo, a maioria dos exemplos nesse tutorial também funcionarão no Netscape 6.
Netscape 7 suporta a Recomendação Oficial W3C XSLT.
MSXML Parser 2.0 é o XML Parser que foi lançado com o IE 5.
MSXML Parser 2.5 é o XML Parser que foi lançado com o Windows 2000 e o IE 5.5.
MSXML Parser 3.0 é o XML Parser que foi lançado com o IE 6 e o Windows XP.
Segundo a Microsoft, o MSXML Parser 3.0 é 100% compatível com a Recomendação Oficial W3C XSLT: "MSXML 3.0 oferece um avanço significativo sobre o MSXML 2.5: acesso HTTP server-safe, implementação completa do XSLT e XPath, mudanças no SAX (Simple API for XML), maior adaptação com os padrões W3C, e vários bugs corrigidos."
Para mais informações: http://msdn.microsoft.com/xml/general/xmlparser.asp
Você pode ler mais sobre as últimas releases do IE na nossa Seção de Browsers.
Exemplo de estudo: Como transformar XML em XHTML usando XSLT.
Os detalhes deste exemplo serão explicados no próximo capítulo.
O elemento raiz que declara o documento a ser uma folha de estilos XSL é <xsl:stylesheet> ou <xsl:transform>.
Nota: <xsl:stylesheet> e <xsl:transform> são completamente sinônimos e um ou outro pode ser usado!
A maneira correta de declarar uma folha de estilos XSL de acordo com a Recomendação W3C XSLT é:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
ou:
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Nota: O xmlns:xsl="http://www.w3.org/1999/XSL/Transform" identifica a Recomendação Namespace oficial W3C XSL. Se você usa este namespace, você também deve incluir o atributo version="1.0".
Nota: Se você está usando o IE 6 ou o Netscape 6 você deve usar um dos códigos acima.
Essa foi a maneira correta de declarar uma folha de estilos XSL de acordo com o rascunho W3C XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
Nota: A declaração acima é ANTIGA, mas se você estiver usando o IE 5 você poderá usar o código (incorreto) acima.
Nós queremos transformar o seguinte documento XML ("cdcatalog.xml") em XHTML:
<?xml version="1.0" encoding="ISO-8859-1"?> <catalog> <cd> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd> . . . </catalog>
Para visualizar um documento XML/XSL no IE 5 (ou mais novo) e Netscape 7 você pode clicar em um link, digitar a URL na barra de endereços ou dar um duplo clique no nome de um arquivo XML em uma pasta de arquivos.
Para visualizar um documento XML/XSL no Netscape 6 você terá que abrir o arquivo XML e então clicar com o botão direito do mouse e escolher "View Page Source".
Então você cria uma folha de estilos XSL ("cdcatalog.xsl") com um molde de tranformação:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th align="left">Title</th> <th align="left">Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Finalmente, adicione uma referência à folha de estilos XSL em seu documento XML ("cdcatalog.xml"):
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?> <catalog> <cd> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd> . . . </catalog>
Se você tiver um browser complacente com XSLT ele transformará bem seu XML em XHTML!
Veja o resultado no IE 6 ou Netscape 6 e 7
Os detalhes do exemplo acima serão explicados nos próximos capítulos!
Uma folha de estilos XSL consiste de um conjunto de regras chamados moldes (templates).
Cada elemento <xsl:template> contém regras para aplicar quando um nó específico é combinado.
O elemento <xsl:template> contém regras a serem aplicadas quando um nó específico é combinado (matched).
O atributo match é usado para associar o molde com um elemento XML. O atributo match também pode ser usado para definir um molde para toda uma seção de um documento XML (por exemplo, match="/" define o documento todo).
A folha de estilos XSL a seguir contém um molde para emitir o Catálogo de CDs XML do capítulo anterior:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <tr> <td>.</td> <td>.</td> </tr> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Como a folha de estilos é também um documento XML, o documento começa com uma declaração xml: <?xml version="1.0" encoding="ISO-8859-1"?>.
A tag <xsl:stylesheet> define o início da folha de estilos.
A tag <xsl:template> define o início de um molde. O atributo match="/" associa (combina) o molde com a raiz (/) do documento XML de origem.
O resto do documento contém o molde propriamente dito, exceto pelas duas últimas linhas que definem o fim do molde e o fim da folha de estilos.
O resultado da transformação será como isso:
My CD Collection
Title | Artist | |
---|---|---|
. | . |
Se você tem o Netscape 6 ou IE 5 ou superior você pode ver: o arquivo XML, o arquivo XSL e o resultado.
O resultado desse exemplo foi um pouco decepcionante, porque nenhum dado foi copiado do documento XML para o resultado.
No próximo capítulo você aprenderá a usar o elemento <xsl:value-of> para selecionar o valor de um elemento XML.
O elemento <xsl:value-of> extrai o valor de um nó selecionado.
O elemento <xsl:value-of> pode ser usado para selecionar o valor de um elemento XML e adicioná-lo no resultado da transformação:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <tr> <td><xsl:value-of select="catalog/cd/title"/></td> <td><xsl:value-of select="catalog/cd/artist"/></td> </tr> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Nota: O valor do atributo select requerido contém uma expressão XPath. Ela funciona como a navegação num sistema de arquivos onde uma barra à frente (/) seleciona subdiretórios.
O resultado da transformação será parecido com isso:
My CD Collection
Title | Artist | |
---|---|---|
Empire Burlesque | Bob Dylan|| |
Se você tem o Netscape 6 ou IE 5 ou superior você pode ver o arquivo XML e o arquivo XSL.
Veja o resultado no IE6 ou Netscape 6 e 7
O resultado desse exemplo também foi um pouco decepcionante, pois somente uma linha de dados foi copiada do documento XML para o resultado.
No próximo capítulo você aprenderá como usar o elemento <xsl:for-each> para selecionar valores de vários elementos XML, e adicioná-los ao resultado.
O elemento <xsl:for-each> permite a você fazer iterações (loops) em XSLT.
O elemento XSL <xsl:for-each> pode ser usado para selecionar todo elemento XML de um conjunto de nós específico :
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Nota: O valor do atributo select requerido contém uma expressão XPath. Ela funciona como a navegação num sistema de arquivos onde uma barra à frente (/) seleciona subdiretórios.
O resultado da transformação será como esse:
My CD Collection
Title | Artist | |
---|---|---|
Empire Burlesque | Bob Dylan | |
Hide your heart | Bonnie Tyler | |
Greatest Hits | Dolly Parton | |
Still got the blues | Gary More | |
Eros | Eros Ramazzotti | |
One night only | Bee Gees | |
Sylvias Mother | Dr.Hook | |
Maggie May | Rod Stewart | |
Romanza | Andréa Bocelli | |
When a man loves a woman | Percy Sledge | |
Black angel | Savage Rose | |
1999 Grammy Nominees | Many | |
For the good times | Kenny Rogers | |
Big Willie style | Will Smith | |
Tupelo Honey | Van Morrison | |
Soulsville | Jorn Hoel | |
The very best of | Cat Stevens | |
Stop | Sam Brown | |
Bridge of Spies | T`Pau | |
Private Dancer | Tina Turner | |
Midt om natten | Kim Larsen | |
Pavarotti Gala Concert | Luciano Pavarotti | |
The dock of the bay | Otis Redding | |
Picture book | Simply Red | |
Red | The Communards | |
Unchain my heart | Joe Cocker |
Se você tem o Netscape 6 ou IE 5 ou superior você pode ver o arquivo XML e o arquivo XSL.
Veja o resultado com o Netscape 6 ou IE 6
Nós podemos filtrar a saída de um arquivo XML adicionando um critério ao atributo select de um elemento <xsl:for-each>.
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
Operadores de filtragem válidos são:
Dê uma olhada na folha de estilos XSL ajustada:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd[artist='Bob Dylan']"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
O resultado da transformação será esse:
My CD Collection
Title | Artist | |
---|---|---|
Empire Burlesque | Bob Dylan |
Se você tem o Netscape 6 ou o IE 5 ou superior você pode ver: o arquivo XML e o arquivo XSL.
Veja o resultado com o Netscape 6 ou IE 6
O elemento <xsl:sort> é usado para ordenar o resultado.
Para gerar um arquivo XML como um arquivo XHTML, e ordená-lo ao mesmo tempo, simplesmente adicione um elemento sort dentro de um elemento for-each no seu arquivo XSL:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <xsl:sort select="artist"/> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
O atributo select indica qual elemento XML a ordenar.
O resultado da transformação será esse:
My CD Collection
Title | Artist | |
---|---|---|
Romanza | Andréa Bocelli | |
One night only | Bee Gees | |
Empire Burlesque | Bob Dylan | |
Hide your heart | Bonnie Tyler | |
The very best of | Cat Stevens | |
Greatest Hits | Dolly Parton | |
Sylvias Mother | Dr.Hook | |
Eros | Eros Ramazzotti | |
Still got the blues | Gary Moore | |
Unchain my heart | Joe Cocker | |
Soulsville | Jorn Hoel | |
For the good times | Kenny Rogers | |
Midt om natten | Kim Larsen | |
Pavarotti Gala Concert | Luciano Pavarotti | |
1999 Grammy Nominees | Many | |
The dock of the bay | Otis Redding | |
When a man loves a woman | Percy Sledge | |
Maggie May | Rod Stewart | |
Stop | Sam Brown | |
Black angel | Savage Rose | |
Picture book | Simply Red | |
Bridge of Spies | T`Pau | |
Red | The Communards | |
Private Dancer | Tina Turner | |
Tupelo Honey | Van Morrison | |
Big Willie style | Will Smith |
Se você tem o Netscape 6 ou o IE 5 ou superior você pode ver: o arquivo XML e o arquivo XSL.
Veja o resultado com o Netscape 6 ou IE 6
Nota: Não é possivel ver o resultado com o IE 5, porque o namespace "http://www.w3.org/TR/WD-xsl" não intrepreta o elemento <xsl:sort>.
O elemento <xsl:if> contém um padrão que só será aplicado se uma condição específica for verdadeira.
Para colocar um teste condicional frente ao conteúdo de um arquivo, simplesmente adicione um elemento <xsl:if> no documento XSL como abaixo:
<xsl:if test="price > 10"> alguma saida... </xsl:if>
O valor do atributo obrigatório test a expressão a ser avaliada.
Dê uma olhada na folhas de estilos XSL ajustada:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <xsl:if test="price > 10"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:if> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
O código acima somente seleciona o título e artista SE o preço do cd for maior que 10.
O resultado da transformação será esse:
My CD Collection
Title | Artist | |
---|---|---|
Empire Burlesque | Bob Dylan | |
Still got the blues | Gary Moore | |
One night only | Bee Gees | |
Romanza | Andréa Bocelli | |
Black Angel | Savage Rose | |
1999 Grammy Nominees | Many |
Se você tem o Netscape 6 ou o IE 5 ou superior você pode ver: o arquivo XML e o arquivo XSL.
Veja o resultado com o Netscape 6 ou IE 6
Nota: Não é possivel ver o resultado com o IE 5, porque o namespace "http://www.w3.org/TR/WD-xsl" não interpreta o elemento <xsl:if>.
O elemento <xsl:choose> é usado em conjunto com <xsl:when> e <xsl:otherwise> para expressar múltiplos testes condicionais.
Para inserir o teste condicional choose frente ao conteúdo de um arquivo XML, simplesmente adicione os elementos <xsl:choose>, <xsl:when> e <xsl:otherwise> no seu arquivo XSL como abaixo:
<xsl:choose> <xsl:when test="price > 10"> ...algum código... </xsl:when> <xsl:otherwise> ...algum código... </xsl:otherwise> </xsl:choose>
Veja a folha de estilos XSL ajustada:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <xsl:choose> <xsl:when test="price > 10"> <td bgcolor="FF000FF"> <xsl:value-of select="artist"/> </td> </xsl:when> <xsl:otherwise> <td><xsl:value-of select="artist"/></td> </xsl:otherwise> </xsl:choose> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
O código acima irá colorir o fundo da coluna artista de rosa QUANDO (WHEN) o preço do cd for maior que 10.
Se você tem o Netscape 6 ou o IE 5 ou superior você pode ver: o arquivo XML e o arquivo XSL.
Veja o resultado com o Netscape 6 ou IE 6
Nota: Não é possivel ver o resultado com o IE 5, porque o namespace "http://www.w3.org/TR/WD-xsl" não interpreta o elemento <xsl:choose>.
Aqui está um outro exemplo que contém vários elementos <xsl:when>:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <xsl:choose> <xsl:when test="price > 10"> <td bgcolor="#ff00ff"> <xsl:value-of select="artist"/> </td> </xsl:when> <xsl:when test="price > 9 and price <= 10"> <td bgcolor="#CCCCCC"> <xsl:value-of select="artist"/> </td> </xsl:when> <xsl:otherwise> <td><xsl:value-of select="artist"/></td> </xsl:otherwise> </xsl:choose> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
O código acima irá colorir o fundo coluna artista de rosa QUANDO (WHEN) o preço do cd for maior que 10 e irá colorir de cinza QUANDO (WHEN) o preço do cd for maior que 9 e menor ou igual a 10.
Se você tem o Netscape 6 ou o IE 5 ou superior você pode ver: o arquivo XML e o arquivo XSL.
Veja o resultado com o Netscape 6 ou IE 6
Nota: Não é possivel ver o resultado com o IE 5, porque o namespace "http://www.w3.org/TR/WD-xsl" não interpreta o elemento <xsl:choose>.
O elemento <xsl:apply-templates> aplica uma regra de molde ao elemento corrente ou aos nós filhos do elemento corrente.
O elemento <xsl:apply-templates> aplica uma regra de molde ao elemento corrente ou aos nós filhos do elemento corrente.
Se nós adicionarmos um atributo de seleção ao elemento <xsl:apply-templates> ele irá processar somente o elemento filho que combinar com o valor do atributo. Nós podemos usar o atributo de seleção para especificar a ordem na qual os nós filhos são processados.
Veja a folha de estilos XSL abaixo:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <xsl:apply-templates/> </body> </html> <xsl:template match="cd"> <p> <xsl:apply-templates select="title"/> <xsl:apply-templates select="artist"/> </p> </xsl:template> <xsl:template match="title"> Title: <span style="color:#FF0000"> <xsl:value-of select="."/></span> <br/> </xsl:template> <xsl:template match="artist"> Artist: <span style="color:#00FF00"> <xsl:value-if select="."/></span> <br/> </xsl:template> </xsl:stylesheet>
Se você tem o Netscape 6 ou o IE 5 ou superior você pode ver: o arquivo XML e o arquivo XSL.
Veja o resultado com o Netscape 6 ou IE 6
Nota: Não é possivel ver o resultado com o IE 5, porque o namespace "http://www.w3.org/TR/WD-xsl" não interpreta o elemento <xsl:apply-templates>.
Se o seu browser suporta XSLT, este pode ser usado para transformar o documento em XHTML no seu browser.
No capítulo anterior nos explicamos como o XSLT pode ser usado para transformar um documento de XML para XHTML. Nós adicionamos uma folha de estilos XSL ao arquivo XML e deixamos o browser fazer a transformação.
Mesmo que isso funcione bem, nem sempre é desejável incluir uma referência a uma folha de estilos no arquivo XML (isto é, não funcionará num browser que não reconhece XSLT.)
Uma solução mais versátil seria usar um JavaScript para fazer a transformação XML em XHTML.
Usando JavaScript nós podemos:
Essa é a beleza do XSLT. Um dos objetivos desenhados para o XSLT era o de tornar possível transformar dados de um formato para outro, suportando browsers diferentes e necessidades de usuários diferentes.
A transformação XSLT do lado do cliente está para ser uma das maiores tarefas para os browsers no futuro, como nós veremos um crescimento no mercado de browsers especializados (Braille, browsers para deficientes auditivos, impressoras web, dispositivos handhelds, etc.)
Dê uma nova olhada no arquivo XML que nós vimos nos capítulos anteriores:
<?xml version="1.0" encoding="ISO-8859-1"?> <catalog> <cd> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd> . . . </catalog>
Se você tem o Netscape 6 ou o IE 5 ou superior você pode ver o arquivo XML.
E a folha de estilos XSL:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9ACD32"> <th align="left">Title</th> <th align="left">Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Se você tem o Netscape 6 ou o IE 5 ou superior você pode ver o arquivo XSL.
Nota: Perceba que o arquivo XML não tem uma referência para o arquivo XSL.
IMPORTANTE: A nota acima indica que um arquivo XML pode ser transformado usando muitos arquivos XSL diferentes.
Aqui está o código fonte necessário para transformar o arquivo XML em XHTML no cliente:
<html> <body> <script type="text/javascript"> //Carrega o XML var xml = new ActiveXObject("Microsoft.XMLDOM") xml.async = false xml.load("cdcatalog.xml") //Carrega o XSL var xsl = ActiveXObject("Microsoft.XMLDOM") xsl.async = false xsl.load("cdcatalog.xsl") //Transforma document.write(xml.transformNode(xsl)) </script> </body> </html>
Se você não sabe JavaScript, você pode estudar pelo nosso tutorial Javascript.
O primeiro bloco de código cria uma instância do Microsoft XML parser (XMLDOM) e carrega o documento XML na memória. O segundo bloco de código cria uma outra instância do parser e carrega o documento XSL na memória. A última linha de código transforma o documento XML usando o documento XSL, e escreve o resultado no documento XHTML. Legal!
Se você tem o IE 6.0: Veja como funciona.
Se você tem o IE 5.0: Veja como funciona.
Como nem todos os browsers suportam XSLT, uma solução é transformar o XML em XHTML no servidor.
No capítulo anterior nós explicamos como XSLT pode ser usado para transformar um documento XML em XHTML no browser. Nós deixamos um JavaScript usar um parser XML para fazer a transformação. Esta solução não funcionará em um browser que não suporte um parser XML.
Para fazer os dados XML disponíveis para todo tipo de browser, nós temos que transformar o documento XML no SERVIDOR e enviá-lo como XHTML puro para o BROWSER.
Essa é uma outra beleza do XSLT. Um dos objetivos desenhados para o XSLT era o de tornar possível transformar dados de um formato para outro em um servidor, retornando dados legíveis para todos os tipos de browsers futuros.
A transformação XSLT no servidor está para ser uma das maiores tarefas do Servidor de Informações de Internet (Internet Information Server) no futuro, assim como veremos um crescimento no mercado de browsers especializados (Braille, browsers para deficientes auditivos, impressoras web, dispositivos handheld, etc.)
Dê uma nova olhada no arquivo XML que nós vimos nos capítulos anteriores:
<?xml version="1.0" encoding="ISO-8859-1"?> <catalog> <cd> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd> . . . </catalog>
Se você tem o Netscape 6 ou o IE 5 ou superior você pode ver o arquivo XML.
E a folha de estilos XSL:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9ACD32"> <th align="left">Title</th> <th align="left">Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Se você tem o Netscape 6 ou o IE 5 ou superior você pode ver o arquivo XSL.
Nota: Perceba que o arquivo XML não tem uma referência para o arquivo XSL.
IMPORTANTE: A nota acima indica que um arquivo XML pode ser transformado usando muitos arquivos XSL diferentes.
Aqui está o código fonte necessário para transformar o arquivo XML em XHTML no servidor:
<% 'Carrega o XML set xml = Server.CreateObject("Microsoft.XMLDOM") xml.async = false xml.load(Server.MapPath("cdcatalog.xml")) 'Carrega o XSL set xsl = Server.CreateObject("Microsoft.XMLDOM") xsl.async = false xsl.load(Server.MapPath("cdcatalog.xsl")) 'Transforma o arquivo Response.Write(xml.transformNode(xsl)) %>
Dica: Se você não conhece ASP, você pode estudar nosso tutorial ASP.
O primeiro bloco de código cria uma instância do Microsoft XML parser (XMLDOM) e carrega o arquivo XML na memória. O segundo bloco de código cria uma outra instância do parser e carrega o documento XSL na memória. A última linha de código transforma o documento XML usando o documento XSL, e escreve o resultado para o browser. Legal!
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários