Escolar Documentos
Profissional Documentos
Cultura Documentos
Tutorial XSLT
Colaborao: Otvio Augusto Bizetto Penatti <<otavio (a) penatti com>> Este tutorial uma traduo do tutorial de XSLT da W3Schools, disponvel em http://www.w3schools.com/xsl/default.asp
Tutorial XSLT
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.
Linguagens XSL
Comeou com XSL e terminou com XSLT, XPath and XSL-FO.
Introduo ao XSLT
Deve haver algo ento, que adicionado ao documento XML, descreve como o documento deve ser mostrado; e isso o XSL!
Introduo ao XSLT
XSLT uma linguagem para transformar documentos XML em outros documentos XML. XPath uma linguagem para definir partes de um documento XML.
Browsers XSLT
XSLT faz isso transformando cada elemento XML em um elemento (X)HTML. XSLT tambm pode adicionar novos elementos no arquivo de sada, ou remover elementos. Ele pode rearranjar e ordenar elementos, testar e tomar decises sobre quais elementos mostrar, e muito mais. Um modo comum de descrever o processo de transformao dizer que o XSLT transforma uma rvore de origem XML em uma rvore de resultado XML.
Browsers XSLT
No so todos os browsers de Internet que tm suporte completo ao XSLT.
Como a Recomendao final W3C XSL diferente do rascunho, o suporte para XSL no IE 5 no 100% compatvel com a Recomendao Oficial XSLT. Esta restrio aplica-se para ambos IE 5 e IE 5.5.
Netscape 6
Netscape 6 no suporta completamente a Recomendao Oficial W3C XSLT. Contudo, a maioria dos exemplos nesse tutorial tambm funcionaro no Netscape 6.
Netscape 7
Netscape 7 suporta a Recomendao Oficial W3C XSLT.
XSLT - Transformaes
XSLT - Transformaes
Exemplo de estudo: Como transformar XML em XHTML usando XSLT. Os detalhes deste exemplo sero explicados no prximo captulo.
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 Recomendao Namespace oficial W3C XSL. Se voc usa este namespace, voc tambm deve incluir o atributo version="1.0". Nota: Se voc est usando o IE 6 ou o Netscape 6 voc deve usar um dos cdigos acima.
Nota: A declarao acima ANTIGA, mas se voc estiver usando o IE 5 voc poder usar o cdigo (incorreto) acima.
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 endereos 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 ento clicar com o boto direito do mouse e escolher "View Page Source". Ver arquivo XML
<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 tiver um browser complacente com XSLT ele transformar bem seu XML em XHTML! Veja o resultado no IE 6 ou Netscape 6 e 7 Veja o resultado no IE 5
Exemplo explicado
Os detalhes do exemplo acima sero explicados nos prximos captulos!
O elemento <xsl:template>
O elemento <xsl:template>
Uma folha de estilos XSL consiste de um conjunto de regras chamados moldes (templates). Cada elemento <xsl:template> contm regras para aplicar quando um n especfico combinado.
Como a folha de estilos tambm um documento XML, o documento comea com uma declarao xml: <?xml version="1.0" encoding="ISO-8859-1"?>.
O elemento <xsl:value-of>
A tag <xsl:stylesheet> define o incio da folha de estilos. A tag <xsl:template> define o incio de um molde. O atributo match="/" associa (combina) o molde com a raiz (/) do documento XML de origem. O resto do documento contm 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 transformao 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 prximo captulo voc aprender a usar o elemento <xsl:value-of> para selecionar o valor de um elemento XML.
O elemento <xsl:value-of>
O elemento <xsl:value-of> extrai o valor de um n selecionado.
O elemento <xsl:value-of>
O elemento <xsl:value-of> pode ser usado para selecionar o valor de um elemento XML e adicion-lo no resultado da transformao:
<?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>
O elemento <xsl:for-each>
<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 contm uma expresso XPath. Ela funciona como a navegao num sistema de arquivos onde uma barra frente (/) seleciona subdiretrios.
O resultado
O resultado da transformao ser parecido com isso: My CD Collection Title Empire Burlesque Artist 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 Veja o resultado no IE 5 O resultado desse exemplo tambm foi um pouco decepcionante, pois somente uma linha de dados foi copiada do documento XML para o resultado. No prximo captulo voc aprender como usar o elemento <xsl:for-each> para selecionar valores de vrios elementos XML, e adicion-los ao resultado.
O elemento <xsl:for-each>
O elemento <xsl:for-each> permite a voc fazer iteraes (loops) em XSLT.
10
O elemento <xsl:for-each>
O elemento <xsl:for-each>
O elemento XSL <xsl:for-each> pode ser usado para selecionar todo elemento XML de um conjunto de ns especfico :
<?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 contm uma expresso XPath. Ela funciona como a navegao num sistema de arquivos onde uma barra frente (/) seleciona subdiretrios.
O resultado
O resultado da transformao ser como esse: My CD Collection Title Empire Burlesque Hide your heart Greatest Hits Artist Bob Dylan Bonnie Tyler Dolly Parton
11
O resultado
Still got the blues Eros One night only Sylvias Mother Maggie May Romanza When a man loves a woman Black angel 1999 Grammy Nominees For the good times Big Willie style Tupelo Honey Soulsville The very best of Stop Bridge of Spies Private Dancer Midt om natten Pavarotti Gala Concert The dock of the bay Picture book Red Unchain my heart
Gary More Eros Ramazzotti Bee Gees Dr.Hook Rod Stewart Andrea Bocelli Percy Sledge Savage Rose Many Kenny Rogers Will Smith Van Morrison Jorn Hoel Cat Stevens Sam Brown T`Pau Tina Turner Kim Larsen Luciano Pavarotti Otis Redding Simply Red The Communards 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
12
Filtrando a sada
Filtrando a sada
Ns podemos filtrar a sada de um arquivo XML adicionando um critrio ao atributo select de um elemento <xsl:for-each>. <xsl:for-each select="catalog/cd[artist='Bob Dylan']"> Operadores de filtragem vlidos so: = (igual) != (diferente) < (menor que) > (maior que) 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
O resultado da transformao ser esse:
13
O elemento <xsl:sort>
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 Veja o resultado com o IE 5
O elemento <xsl:sort>
O elemento <xsl:sort> usado para ordenar o resultado.
14
</xsl:template> </xsl:stylesheet>
O resultado
O resultado da transformao ser esse: My CD Collection Title Romanza One night only Empire Burlesque Hide your heart The very best of Greatest Hits Sylvias Mother Eros Still got the blues Unchain my heart Soulsville For the good times Midt om natten Pavarotti Gala Concert 1999 Grammy Nominees The dock of the bay When a man loves a woman Maggie May Stop Artist Andrea Bocelli Bee Gees Bob Dylan Bonnie Tyler Cat Stevens Dolly Parton Dr.Hook Eros Ramazzotti Gary Moore Joe Cocker Jorn Hoel Kenny Rogers Kim Larsen Luciano Pavarotti Many Otis Redding Percy Sledge Rod Stewart Sam Brown
15
O elemento <xsl:if>
Black angel Picture book Bridge of Spies Red Private Dancer Tupelo Honey Big Willie style
Savage Rose Simply Red T`Pau The Communards Tina Turner Van Morrison 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: No possivel ver o resultado com o IE 5, porque o namespace "http://www.w3.org/TR/WD-xsl" no intrepreta o elemento <xsl:sort>.
O elemento <xsl:if>
O elemento <xsl:if> contm um padro que s ser aplicado se uma condio especfica for verdadeira.
16
<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 cdigo acima somente seleciona o ttulo e artista SE o preo do cd for maior que 10.
O resultado
O resultado da transformao ser esse: My CD Collection Title Empire Burlesque Still got the blues One night only Romanza Black Angel Artist Bob Dylan Gary Moore Bee Gees Andrea Bocelli 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: No possivel ver o resultado com o IE 5, porque o namespace "http://www.w3.org/TR/WD-xsl" no interpreta o elemento <xsl:if>.
17
O elemento <xsl:choose>
O elemento <xsl:choose>
O elemento <xsl:choose> usado em conjunto com <xsl:when> e <xsl:otherwise> para expressar mltiplos testes condicionais.
18
</xsl:stylesheet>
O cdigo acima ir colorir o fundo da coluna artista de rosa QUANDO (WHEN) o preo do cd for maior que 10.
O resultado
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: No possivel ver o resultado com o IE 5, porque o namespace "http://www.w3.org/TR/WD-xsl" no interpreta o elemento <xsl:choose>.
Um outro exemplo
Aqui est um outro exemplo que contm vrios 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>
19
O elemento <xsl:apply-templates>
O cdigo acima ir colorir o fundo coluna artista de rosa QUANDO (WHEN) o preo do cd for maior que 10 e ir colorir de cinza QUANDO (WHEN) o preo do cd for maior que 9 e menor ou igual a 10.
O resultado
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: No possivel ver o resultado com o IE 5, porque o namespace "http://www.w3.org/TR/WD-xsl" no interpreta o elemento <xsl:choose>.
O elemento <xsl:apply-templates>
O elemento <xsl:apply-templates> aplica uma regra de molde ao elemento corrente ou aos ns filhos do elemento corrente.
O elemento <xsl:apply-templates>
O elemento <xsl:apply-templates> aplica uma regra de molde ao elemento corrente ou aos ns filhos do elemento corrente. Se ns adicionarmos um atributo de seleo ao elemento <xsl:apply-templates> ele ir processar somente o elemento filho que combinar com o valor do atributo. Ns podemos usar o atributo de seleo para especificar a ordem na qual os ns filhos so 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="/">
20
XSLT - No Cliente
<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>
O resultado
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: No possivel ver o resultado com o IE 5, porque o namespace "http://www.w3.org/TR/WD-xsl" no interpreta o elemento <xsl:apply-templates>.
XSLT - No Cliente
Se o seu browser suporta XSLT, este pode ser usado para transformar o documento em XHTML no seu browser.
21
documento de XML para XHTML. Ns adicionamos uma folha de estilos XSL ao arquivo XML e deixamos o browser fazer a transformao. Mesmo que isso funcione bem, nem sempre desejvel incluir uma referncia a uma folha de estilos no arquivo XML (isto , no funcionar num browser que no reconhece XSLT.) Uma soluo mais verstil seria usar um JavaScript para fazer a transformao XML em XHTML. Usando JavaScript ns podemos: fazer testes para browsers especficos usar diferentes folhas de estilos de acordo com o browser e com as necessidades do usurio Essa a beleza do XSLT. Um dos objetivos desenhados para o XSLT era o de tornar possvel transformar dados de um formato para outro, suportando browsers diferentes e necessidades de usurios diferentes. A transformao XSLT do lado do cliente est para ser uma das maiores tarefas para os browsers no futuro, como ns veremos um crescimento no mercado de browsers especializados (Braille, browsers para deficientes auditivos, impressoras web, dispositivos handhelds, etc.)
22
Se voc tem o Netscape 6 ou o IE 5 ou superior voc pode ver o arquivo XSL. Nota: Perceba que o arquivo XML no tem uma referncia para o arquivo XSL. IMPORTANTE: A nota acima indica que um arquivo XML pode ser transformado usando muitos arquivos XSL diferentes.
23
XSLT - No Servidor
//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 no sabe JavaScript, voc pode estudar pelo nosso tutorial Javascript. O primeiro bloco de cdigo cria uma instncia do Microsoft XML parser (XMLDOM) e carrega o documento XML na memria. O segundo bloco de cdigo cria uma outra instncia do parser e carrega o documento XSL na memria. A ltima linha de cdigo 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.
XSLT - No Servidor
Como nem todos os browsers suportam XSLT, uma soluo transformar o XML em XHTML no servidor.
24
A transformao XSLT no servidor est para ser uma das maiores tarefas do Servidor de Informaes 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.)
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>
25
Referncias
</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 no tem uma referncia para o arquivo XSL. IMPORTANTE: A nota acima indica que um arquivo XML pode ser transformado usando muitos arquivos XSL diferentes.
Dica: Se voc no conhece ASP, voc pode estudar nosso tutorial ASP. O primeiro bloco de cdigo cria uma instncia do Microsoft XML parser (XMLDOM) e carrega o arquivo XML na memria. O segundo bloco de cdigo cria uma outra instncia do parser e carrega o documento XSL na memria. A ltima linha de cdigo transforma o documento XML usando o documento XSL, e escreve o resultado para o browser. Legal! Veja como funciona.
Referncias
Elementos XSLT Funes XSLT
26
27