Você pode ver como ficou o arquivo clicando neste link: locadora.xml
Caso seu navegador não suporte XML você não poderá ver o conteúdo do arquivo.
Vamos agora ao arquivo de transformação XSL, na verdade trata-se de um documento XML com funções XSL.
locadora-tudo.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1"/>
<xsl:template match="/">
<html>
<head>
<title>Locadora de DVD</title>
<link href="locadora.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<h2>Filmes</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left" rowspan="2">Titulo</th>
<th align="left" rowspan="2">Preço R$</th>
<th align="left" rowspan="2">Estoque</th>
<th align="center" colspan="3">Audio</th>
</tr>
<tr bgcolor="#9acd32">
<th align="center">Português</th>
<th align="center">Inglês</th>
<th align="center">Espanhol</th>
</tr>
<xsl:for-each select="locadora/DVD">
<tr>
<td><xsl:value-of select="titulo"/></td>
<td align="center"><xsl:value-of select="preco"/></td>
<xsl:choose>
<xsl:when test="quantidade < 3">
<td align="center" style="color:red"> <xsl:value-of select="quantidade"/> </td>
</xsl:when>
<xsl:otherwise>
<td align="center"><xsl:value-of select="quantidade"/></td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="legenda='português'">
<td align="center">x</td>
</xsl:when>
<xsl:otherwise>
<td></td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="legenda='inglês'">
<td align="center">x</td>
</xsl:when>
<xsl:otherwise>
<td></td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="legenda='espanhol'">
<td align="center">x</td>
</xsl:when>
<xsl:otherwise> <td></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
<p>Total de DVDs em estoque: <xsl:value-of select="sum(//quantidade)"/></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
A declaração de um documento de transformação XSL é semelhante a de um documento XML (como já foi dito antes trata-se realmente de um XML), exceto pelas três linhas seguintes a declaração do documento XML.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1"/>
<xsl:template match="/">
Na segunda linha informamos que este arquivo será usado como uma folha de estilos XSL versão 1.0.
Na terceira linha informamos que o arquivo resultante será um arquivo 'html' usando a codificação 'iso-8859-1'.
Na quarta linha começamos a fazer a transformação propriamente dita, o elemento XSL 'template' irá conter as partes do documento XML associado com esta folha de estilos que serão processadas.
A propriedade 'match' informa que partes são estas, neste caso '/', que significa na prática todo o documento XML.
A seguir temos uma sequência de entradas HTML que fazem parte da transformação do documento XML, dentre elas temos:
<link href="locadora.css" rel="stylesheet" type="text/css"/>
Que define a folha de estilo CSS que formatará o código HTML resultante. Não iremos explicar o funcionamento deste arquivo neste artigo, seu conteúdo está demonstrado no Anexo I.
As próximas linhas relevantes são as seguintes:
<xsl:for-each select="locadora/DVD">
<tr>
<td><xsl:value-of select="titulo"/></td>
<td align="center"><xsl:value-of select="preco"/></td>
Nesta parte do código temos o início de um laço de programação da linguagem XSL '<xsl:for-each select="locadora/DVD">'. Este é um laço do tipo 'for each', ou seja, executa todo o código que estiver dentro do laço para cada elemento '<DVD>' existente em '<locadora>'. Todo o código a seguir, até o fechamento do laço 'for each' considerará os valores dentro de cada elemento '<DVD>' .
Abre-se então uma nova linha para a tabela '<tr>' e uma nova célula '<td>', e dentro da célula colocamos o valor do elemento '<titulo>' encontrado dentro dos elementos '<DVD>' . Fazemos isto com o método 'value-of' da linguagem XSL, este método pegará o valor do elemento descrito no atributo 'select', neste caso o valor do elemento 'titulo'.