O que você irá aprender com esse tutorial:
- Como montar um xsl
- Como criar uma variável dentro do xsl
- Como verificar se um elemento do xml está vazio, ou então compará-lo com outra string
A grosso modo XSLT é o CSS do XML, é uma folha de estilo para XML.
Eu fiz um pequeno tutorial, onde você irá aprender como listar os elementos de um XML, usando o XSL, e também como verificar se determinado elemento está vazio ou não, se estiver vazio você mostra uma mensagem, caso contrário você mostra o valor do elemento. Para isso vamos criar uma variável dentro do XSL.
Imagine que você tem uma lista de contatos em XML. E quer fazer uma página para exibí-los. Qual a melhor forma de fazer isso? Usando o XSLT.
Primeiro passo - conhecer seu XML
Fica meio difícil você montar o XSL sem ao menos conhecer a sua estrutura XML. Por isso a primeira coisa que você precisa fazer é abrir seu XML e conhecer a sua estrutura.
No nosso exemplo, o XML de contatos tem a seguinte estrutura:
<contato>
<pessoa>
<nome>Bob Dylan</nome>
<telefoneresidencia>555-0001</telefoneresidencia>
<telefonecelular>999-0001</telefonecelular>
</pessoa>
...
</contato>
Segundo passo - mostrar para o XML onde está o XSL
Agora você precisa dizer ao XML onde está o XSL dele.
Veja como fazer isso, na linha abaixo. Nosso XSL se chama contato.xsl.
<?xml-stylesheet type="text/xsl" href="contatos.xsl"?>
Terceiro passo - montar o XSL
O XSL tem o seguinte cabeçalho:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
O XSL completo fica assim:
<?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>
<head>
<title>Meus contatos</title>
</head>
<body>
<h2>Meus contatos</h2>
<xsl:for-each select="contato/pessoa">
<h3><xsl:value-of select="nome" /></h3>
<div>Telefone residencial: <xsl:value-of select="telefoneresidencia" /></div>
<div>Telefone celular: <xsl:value-of select="telefonecelular" /></div>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Vou explicar algumas partes dele:
<xsl:template match="/">
<!-- indica que o template irá pegar os elementos apartir da raiz do XML -->
Abaixo damos a instrução para percorrer todos os elementos pessoa que está dentro de contato, do XML.
<xsl:for-each select="contato/pessoa">
...
</xsl:for-each>
E dentro do for-each mandamos exibir os elementos do XML>
<xsl:for-each select="contato/pessoa">
<h3><xsl:value-of select="nome" /></h3>
<div>Telefone residencial: <xsl:value-of select="telefoneresidencia" /></div>
<div>Telefone celular: <xsl:value-of select="telefonecelular" /></div>
</xsl:for-each>
Quarto passo - Variáveis dentro do XSL
Bom, nem todo mundo tem celular hoje em dia, certo?
Então fica feio você exibir:
Telefone celular: vazio
Fica mais elegante se você nem exibir o “Telefone celular:” ou Mostrar uma mensagem do tipo ” Sem telefone celular“.
Para isso podemos criar uma variável dentro do XSL, atribuir o valor de um nó à ela, e comparar ela com alguma coisa, para ver se exibimos ou não tal elemento.
Para criar uma variável é bem simples
<xsl:variable name="nome_da_variavel">valor</xsl:variable>
E no nosso caso, queremos uma variável para ver se
<xsl:variable name="telefonecelular"><xsl:value-of select="telefonecelular"/></xsl:variable>
Agora já temos uma variável com o valor do nó contato/pessoa/telefonecelular. E precisamos comparar se o valor da variável é vazia ou não.
Veja como fazer isso nas linhas abaixo:
Lembrando que para acessar uma variável precisamos colocar o sifrão ($): $telefonecelular, apenas para acessá-la, para criar é sem o sifrão ($) mesmo.
<xsl:choose>
<xsl:when test="$telefonecelular=''"><!-- comparamos se o valor está igual a '' (vazio) -->
<i>Sem telefone celular</i><!-- no caso de vazio exibimos essa linha -->
</xsl:when>
<xsl:otherwise><!-- caso contrário, exibimos a linha abaixo-->
<div>Telefone celular: <xsl:value-of select="telefonecelular" /></div>
</xsl:otherwise>
</xsl:choose>
Quinto passo - está feito
Pronto, nosso XSL que exibe todos os nossos contatos, e verifica se o contato tem ou não o telefone celular.
Links / download
Nota:
É muito importante que você feche todas as tags que você abrir. Senão dá erro, tanto no XML quanto no XSL.