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 XPath e XML - 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 :
XmlDocument - È encontradas no namespace System.XML. Esta classe pode ser usada onde uma estrutura DOM precisa ser editada primeiro antes da transformação XSL.
XmlDataDocument - já aquela estende a classe XMLDocument e pode ser usada para trabalhar com DataSets.
XPathDocument.
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.XmlAgora 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 |
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