Elementos XSL (parte1)

Informática

31/10/2008

Elemento <xsl:template>

Este elemento é usado para constuir templates.

O atributo match é usado para associar o template com um elemento XML. O atributo match também pode ser usado para definir um template para toda uma seção de um documento XML (por exemplo, match="/" define o documento todo).

A folha de estilos XSL a seguir contém um template para emitir o Catálogo de CDs XML  do artigo anterior:

<?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>
     <tr>
       <td>.</td>
       <td>.</td>
     </tr>
   </table>
 </body>
 </html>
</xsl:template>

</xsl:stylesheet>


Como a folha de estilos é também um documento XML, o documento começa com uma declaração xml: <?xml version="1.0" encoding="ISO-8859-1"?>.

A tag <xsl:stylesheet> define o início da folha de estilos.

A tag <xsl:template> define o início de um template. O atributo match="/" associa (combina) o template com a raiz (/) do documento XML de origem.

O resto do documento contém o molde propriamente dito, exceto pelas duas últimas linhas que definem o fim do template e o fim da folha de estilos.

O resultado da transformação será como isso:

My CD Collection

Title Artist
. .



Elemento <xsl:value-of>

O elemento <xsl:value-of> extrai o valor de um nó selecionado.

O elemento <xsl:value-of> pode ser usado para selecionar o valor de um elemento XML e adicioná-lo no resultado da transformação:

<?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>
          <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>


OBS: O valor do atributo select requerido contém uma expressão XPath. Ela funciona como a navegação num sistema de arquivos onde uma barra à frente (/) seleciona subdiretórios.

O resultado deste exemplo será semelhante a este:

My CD Collection

Title Artist
Empire Burlesque Bob Dylan


O resultado desse exemplo também não foi muito bom, pois somente uma linha de dados foi copiada do documento XML para o resultado.
O próximo elemento nos mostrará como selecionar vários valores.


Elemento <xsl:for-each>

O elemento XSL <xsl:for-each> pode ser usado para selecionar todo elemento XML de um conjunto de nós específico :

 <?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>   


OBS: O valor do atributo select requerido contém uma expressão XPath. Ela funciona como a navegação num sistema de arquivos onde uma barra à frente (/) seleciona subdiretórios.

Resultado será semelhante a isto:

My CD Collection

Title Artist
Empire Burlesque Bob Dylan
Hide your heart Bonnie Tyler
Greatest Hits Dolly Parton
Still got the blues Gary More
Eros Eros Ramazzotti
One night only Bee Gees
Sylvias Mother Dr.Hook
Maggie May Rod Stewart
Romanza Andrea Bocelli
When a man loves a woman Percy Sledge



Filtrando uma saída.

Nós podemos filtrar a saída de um arquivo XML adicionando um critério ao atributo select de um elemento <xsl:for-each>.

<xsl:for-each select="catalog/cd[artist='Bob Dylan']">

Operadores de filtragem válidos são:

  •  = (igual)
  • != (diferente)
  •  &lt; (menor que)
  • &gt; (maior que)

Exemplo:

<?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>


Resultado:

My CD Collection

Title Artist
Empire Burlesque Bob Dylan

Esta apresentação reflete a opinião pessoal do autor sobre o tema, podendo não refletir a posição oficial do Portal Educação.


Colunista Portal - Educação

por Colunista Portal - Educação

O Portal Educação possui uma equipe focada no trabalho de curadoria de conteúdo. Artigos em diversas áreas do conhecimento são produzidos e disponibilizados para profissionais, acadêmicos e interessados em adquirir conhecimento qualificado. O departamento de Conteúdo e Comunicação leva ao leitor informações de alto nível, recebidas e publicadas de colunistas externos e internos.

Portal Educação

UOL CURSOS TECNOLOGIA EDUCACIONAL LTDA, com sede na cidade de São Paulo, SP, na Alameda Barão de Limeira, 425, 7º andar - Santa Cecília CEP 01202-001 CNPJ: 17.543.049/0001-93