ASP.NET - Transformando XML com XSLT


 

O XMLST - XML Stylesheet Transformation é definida como uma linguagem usada para converter documentos XML para outros formatos de documentos.

 

Nota: Sugiro que antes de prosseguir você leia os artigos do site:  Tutorial XPathXML - eXtensible Markup Language - Introdução

 

Os processadores XSLT tratam a entrada de documentos XML bem como as folhas de estilo XSLT e então processa as instruções encontradas na folha de estilo XSLT usando os elementos do documento XML. Durante o processamento as instruções XSLT é gerada como saída um documento XML estruturado.

 

Para transformar XML para HTML para ser usado em um sitio da web ou para transformar o XML em um documento que contenha a informação necessária usamos o a classe XSLTransform encontrada no namespace System.Xml.Xsl.

 

Uma transformação XSL usa como documento de entrada um documento XML através de 3 classes as quais implementam XPathNavigator e IXPathNavigabel :

Afim de realizar uma transformação usando XslTransformation você deve primeiro criar um objeto XslTransform e carregá-lo com o documento XSLT desejado usando o método Load. Este método da classe XslTransform carrega a folha de estilo XSL.

 

A transformação é executada através da chamada do método Transform da classe XslTransform.

 

Vejamos com fazer isto na prática:

 

Vamos usar o seguinte arquivo XML e efetuar a transformação do mesmo usando XslTransform em uma página ASP.NET.

 

Produtos.xml

<?xml version="1.0" encoding="utf-8" ?>
<Produtos>
   <produto>
      <codigo>10009</codigo>
      <nome>Leite Desnatado</nome>
      <estoque>100</estoque>
   </produto>  
   <produto>
      <codigo>10010</codigo>
      <nome>Farinha de Trigo</nome>
      <estoque>360</estoque>
   </produto>  
   <produto>
      <codigo>10011</codigo>
      <nome>Manteiga</nome>
      <estoque>540</estoque>
   </produto>  
   <produto>
      <codigo>10012</codigo>
      <nome>Azeite de Oliva</nome>
      <estoque>309</estoque>
   </produto>  
</Produtos>

 

 

Nota: Cuidado, o xml é case-sensitive assim produto é diferente de Produto.

 

Vamos criar o documento XSLT para o documento XML acima.

 

Produtos.xslt

<?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="/">
                  <table border="1">
                        <tr>
                              <th>Codigo</th>
                              <th>Nome</th>
                              <th>Estoque</th>
                        </tr>
                        <xsl:for-each select="Produtos/produto">
                        <tr>
                              <td>
                                    <br><xsl:value-of select="codigo"/></br>
                              </td>
                              <td>
                                    <br><xsl:value-of select="nome"/></br>
                              </td>
                              <td>
                                    <br><xsl:value-of select="estoque"/></br>
                              </td>
                        </tr>
                        </xsl:for-each>
                  </table>
            </xsl:template>
      </xsl:stylesheet>

 

O arquivo produtos.xslt nada mais é do que nosso arquivo de folha de estilo com as definições que iremos aplicar sobre o arquivo produtos.xml para que uma página aspx seja gerada.

 

Agora vamos criar uma página ASP.NET usando o Visual Web Developer para poder mostrar como podemos efetuar a transformação.

 

Abra o VWD e crie um novo Web Site. Na página padrão default.aspx , estando no modo Design inclua dois cotnroles XML a partir da toolBox :

 

 

Os namespaces usados no projeto serão:

Imports System.Xml
Imports
System.Xml.xsl

Agora vamos incluir o seguinte código no evento Load da página web:

 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Dim documentoXML As New XmlDocument
documentoXML.Load(Server.MapPath(
"produtos.xml"))

Dim documentoXSL As New XslTransform
documentoXSL.Load(Server.MapPath(
"produtos.xslt"))

Xml1.Document = documentoXML
Xml1.Transform = documentoXSL

End Sub

 

 

No código acima estou criando dois objetos : documentoXML para tratar o arquivo XML e documentoXSL para tratar o arquivo XSLT.

 

Usando o método Load estamos carregando os dois arquivos nos objetos e em seguida atribuindo aos controles XML do servidor.(xml1 e xml2).

 

A transformação ocorre de forma automática quando a página é executada, conforme exibição da figura abaixo que mostra o resultado obtido para o nosso exemplo:

 

 

Em um próximo artigo eu irei mostrar como você pode usar este recurso para transformar os dados de um banco de dados aplicando XSLT. Aguarde...
 


José Carlos Macoratti