Como usar um arquivo XML com um Schema Definido (XSLT) no Asp.Net

De Wiki Locaweb
Ir para: navegação, pesquisa

O método XSLT permite transformar arquivo XML em outros formatos e tem várias outras funcionalidades, é possível efetuar cálculos, filtrar informações, controlar espaços em branco em um documento entre outras funções. Abaixo segue exemplo utilizando alguns métodos possíveis no Asp.Net.

Conteúdo

Método Transform

Usando o método XslTransform, são exibidos os dados de um arquivo XML com base nas definições de um arquivo XSLT.

Arquivo: xslt1.aspx(exemplo)

<%@ Page Language="C#" %>
<%@ import Namespace="System" %>
<%@ import Namespace="System.Xml" %>
<%@ import Namespace="System.Xml.Xsl" %>
<html>
<script runat="server">
 
// Exemplo usando XSLT usando o método tranform
private void Page_Load(Object Sender, EventArgs e)
{
 
//Carrega-Se um documento normalmente
XmlDocument doc = new XmlDocument();
doc.Load("http:/www.SEUDOMINIO.com.br/estado.xml");
 
//Cria-se uma instância XslTransform
XslTransform xls=new XslTransform();
 
//Carrega-se a folha de estilo a ser usada no arquivo xml
xls.Load("http://www.xyz.com.br/foreach.xslt");
 
//Usando o metódo transform, aplicamos a folha de estilo em doc
// o parâmetro null poderia ser um caminho especifico que poderia ser mostrado o resultado
XmlReader r = xls.Transform(doc,null);
 
//No loop lemos todo o documento e apresenta o resultado no browser
while(r.Read())
{
Response.Write(r.ReadOuterXml());
}
}
</script>
</html>


Arquivo: estado.xml

<?xml version="1.0" encoding="utf-8" ?>
	<Estados>
		<Estado ref="MG">
			<name>Minas Gerais</name>
			<capital>Belo Horizonte</capital>
		</Estado>
		<Estado ref="SP">
			<name>São Paulo</name>
			<capital>São Paulo</capital>
		</Estado>
	</Estados>


Arquivo: foreach.xslt

<?xml version="1.0" encoding="UTF-8" ?>
	<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
		<xsl:template match="/">
			<html>
				<body>
					<table border="1" color="#ff3300">
						<xsl:for-each select="//Estado">
							<tr>
								<td><xsl:value-of select="name"/></td>
								<td><xsl:value-of select="capital"/></td>
							</tr>
						</xsl:for-each>
					</table>
				</body>
			</html>
		</xsl:template>
	</xsl:stylesheet>

Método Select

Usando o método Select é possível retornar um conjunto de nós especificados no Xpath. Como no exemplo abaixo:

Arquivo: xslt.aspx(exemplo)

<%@ Page Language="C#" %>
<%@ import Namespace="System" %>
<%@ import Namespace="System.Xml" %>
<%@ import Namespace="System.Xml.XPath" %>
<html>
<script runat="server">
 
// Exemplo usando XSLT usando o método Select
public void Page_Load(Object Sender, EventArgs e)
{
//Carrega-se normalmente o documento
XmlDocument doc = new XmlDocument();
doc.Load("http://www.SEUDOMINIO.com.br/estado.xml");
 
//Usando o metódo CreateNavegator instanciamos um objeto do tipo XPathNavegator
XPathNavigator Nav=doc.CreateNavigator();
 
//Com o método Select definimos o XPath que será utilizado no documento
//i foi instanciado como XPathNodeIterator que contém o conjunto de nós que irão ser usados
XPathNodeIterator i = Nav.Select("//Estado/name");
 
//Um loop com o valor de i que caminha entre os nós desejados
while(i.MoveNext())
{
//Mostrar no browser o valor do nó corrente
Response.Write(i.Current.Value + "<br>");
}
}
 
</script>
</html>

Método Compile

O método Compile é muito similar o método Select, só que por questões de performance é muito mais rápido, quando se tem arquivos maiores e expressões no Xpath mais complexas é possível se notar a diferença. O que ele faz exatamente é compilar a instrução Xpath.

<%@ Page Language="C#" %>
<%@ import Namespace="System" %>
<%@ import Namespace="System.Xml" %>
<%@ import Namespace="System.Xml.XPath" %>
<html>
<script runat="server">
 
// Exemplo usando XSLT usando o método Compile
public void Page_Load(Object Sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load("http://www.SEUDOMINIO.com.br/estado.xml");
 
XPathNavigator Nav=doc.CreateNavigator();
//A única diferença com o método select é a chamada do metódo
XPathExpression cache = Nav.Compile("//Estado/name");
XPathNodeIterator i = Nav.Select(cache);
 
while(i.MoveNext())
{
Response.Write(i.Current.Value + "<br>");
}
}
 
</script>
</html>

Veja também

Links

Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Ferramentas
Criar um livro