Fundamentos do XSLT
Aula 1 de 5
Introdução ao XSLT
XSLT (eXtensible Stylesheet Language Transformations) transforma documentos XML em outros formatos como HTML, XML ou texto.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8"/>
<xsl:template match="/">
<html>
<body>
<h1><xsl:value-of select="//titulo"/></h1>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Templates: match e name
Templates são os blocos de construção do XSLT. Podem ser invocados por padrão de match ou explicitamente por nome.
<!-- Template por match (automático) -->
<xsl:template match="/livro">
<div class="livro">
<xsl:apply-templates/>
</div>
</xsl:template>
<!-- Template nomeado (invocação explícita) -->
<xsl:template name="cabecalho">
<header>
<h1>Catálogo de Livros</h1>
</header>
</xsl:template>
<xsl:template match="/">
<xsl:call-template name="cabecalho"/>
<xsl:apply-templates/>
</xsl:template>
value-of e apply-templates
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<body>
<h1>Relatório de Vendas</h1>
<table border="1">
<tr>
<th>Produto</th>
<th>Preço</th>
</tr>
<xsl:apply-templates select="//produto"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="produto">
<tr>
<td><xsl:value-of select="nome"/></td>
<td><xsl:value-of select="preco"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
Output Formats
<!-- HTML -->
<xsl:output method="html" encoding="UTF-8" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"/>
<!-- XML -->
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<!-- Texto puro -->
<xsl:output method="text" encoding="UTF-8"/>
# Transformar XML com XSLT usando xsltproc
xsltproc transform.xsl dados.xml > output.html
# ou com Saxon (mais recursos)
java -jar saxon9he.jar -s:dados.xml -xsl:transform.xsl -o:output.html
Lab: Transformando XML para HTML
# 1. Documento XML fonte
cat << 'EOF' > livros.xml
<?xml version="1.0"?>
<livros>
<livro>
<titulo>1984</titulo>
<autor>George Orwell</autor>
<ano>1949</ano>
<preco>39.90</preco>
</livro>
<livro>
<titulo>Duna</titulo>
<autor>Frank Herbert</autor>
<ano>1965</ano>
<preco>59.90</preco>
</livro>
</livros>
EOF
# 2. Folha XSLT
cat << 'EOF' > livros.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="UTF-8"/>
<xsl:template match="/">
<html>
<head><title>Livros</title></head>
<body>
<h1>Catálogo de Livros</h1>
<table border="1">
<tr><th>Título</th><th>Autor</th><th>Ano</th><th>Preço</th></tr>
<xsl:for-each select="//livro">
<tr>
<td><xsl:value-of select="titulo"/></td>
<td><xsl:value-of select="autor"/></td>
<td><xsl:value-of select="ano"/></td>
<td>R$ <xsl:value-of select="preco"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
EOF
# 3. Executar transformação
xsltproc livros.xsl livros.xml > livros.html
# 4. Visualizar resultado
type livros.html
XSLT separa dados (XML) da apresentação, permitindo múltiplas saídas do mesmo conteúdo.