kb.erickguedes.com
XSLT: Transformação de Documentos

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.