Elementos XSL (parte 2)

Informática

30/11/2008

Elemento <xsl:sort>

O elemento <xsl:sort> é usado para ordenar o resultado.
Para gerar um arquivo XML como um arquivo XHTML, e ordená-lo, adicione um elemento sort dentro
de um elemento for-each no seu arquivo XSL:


<?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">
      <xsl:sort select="artist"/>
      <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 elemento select indica qual elemento xml ordenar.

Resultado:

My CD Collection

Title Artist
Romanza Andrea Bocelli
One night only Bee Gees
Empire Burlesque Bob Dylan
Hide your heart Bonnie Tyler
The very best of Cat Stevens
Greatest Hits Dolly Parton
Sylvias Mother Dr.Hook
Eros Eros Ramazzotti
Still got the blues Gary Moore
Unchain my heart Joe Cocker
Soulsville Jorn Hoel
For the good times Kenny Rogers
Midt om natten Kim Larsen



Elemento <xsl:if>


O elemento <xsl:if> contém um padrão que só será aplicado se uma condição específica for verdadeira.
Para utiliza-lo simplesmente adicione um elemento <xsl:if> no documento XSL conforme o exemplo:

<xsl:if test="expression">
  ...
  ...saída se a expressão for verdadeira...
  ...
</xsl:if>

O atributo test recebe a expressão a ser avaliada

<?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">
      <xsl:if test="price &gt; 10">
        <tr>
          <td><xsl:value-of select="title"/></td>
          <td><xsl:value-of select="artist"/></td>
        </tr>
      </xsl:if>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>


Motrará o título e o artista do Cd, que tem valor acima de 10.

Elemento <xsl:choose>

O elemento <xsl:choose> é usado em conjunto com <xsl:when> e <xsl:otherwise>
para expressar múltiplos testes condicionais.


Para inserir o teste condicional choose para o conteúdo de um arquivo XML,
adicione os elementos <xsl:choose>, <xsl:when> e <xsl:otherwise> no seu arquivo XSL como abaixo:

<xsl:choose>
  <xsl:when test="expression">
    ... saída ...
  </xsl:when>
  <xsl:otherwise>
    ... saída ....
  </xsl:otherwise>
</xsl:choose>



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 bgcolor="#9acd32">
        <th>Title</th>
        <th>Artist</th>
      </tr>
      <xsl:for-each select="catalog/cd">
      <tr>
        <td><xsl:value-of select="title"/></td>
          <xsl:choose>
          <xsl:when test="price &gt; 10">
            <td bgcolor="#ff00ff">
            <xsl:value-of select="artist"/></td>
          </xsl:when>
          <xsl:when test="price &gt; 9">
            <td bgcolor="#cccccc">
            <xsl:value-of select="artist"/></td>
          </xsl:when>
          <xsl:otherwise>
            <td><xsl:value-of select="artist"/></td>
          </xsl:otherwise>
        </xsl:choose>
      </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>


O código acima irá colorir o fundo coluna artista de rosa QUANDO (WHEN) o preço do cd for maior que 10 e irá colorir de cinza QUANDO (WHEN) o preço do cd for maior que 9 e menor ou igual a 10. 

Elemento <xsl:apply-templates>

O elemento <xsl:apply-templates> aplica uma regra de template ao elemento corrente ou aos nós filhos do elemento corrente.

Se nós adicionarmos um atributo de seleção ao elemento <xsl:apply-templates> ele irá processar somente o elemento
filho que combinar com o valor do atributo. Nós podemos usar o atributo de seleção para especificar a ordem na qual
os nós filhos são processados.

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>
      <xsl:apply-templates/>
    </body>
  </html>
 
  <xsl:template match="cd">
    <p>
      <xsl:apply-templates select="title"/>
      <xsl:apply-templates select="artist"/>
    </p>
  </xsl:template>
 
  <xsl:template match="title">
    Title: <span style="color:#FF0000">
    <xsl:value-of select="."/></span>
    <br/>
  </xsl:template>
 
  <xsl:template match="artist">
    Artist: <span style="color:#00FF00">
    <xsl:value-if select="."/></span>
    <br/>
  </xsl:template>
 
  </xsl:stylesheet>

Resultado:

My CD Collection

Title: Empire Burlesque
Artist: Bob Dylan

Title: Hide your heart
Artist: Bonnie Tyler

Title: Greatest Hits
Artist: Dolly Parton

Title: Still got the blues
Artist: Gary Moore

Title: Eros
Artist: Eros Ramazzotti

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