En esta publicación voy a mostrar cómo se puede mostrar documentos XML "transformados" o formateados en una página web, para ello se utiliza el XML Web Server Control.
Este componente que nos facilita el Framework, nos permite mostrar en un área de una página o formulario web el contenido de un documento XML, pero lo más interesante es que se lo puede "procesar", para ello utiliza otro documento (un XSLT Extensible Stylesheet Language Transformation) que no es otra cosa que un documento en XML que indica cómo se debe procesar en este caso "transformar" el documento original.
Esto muy útil cuando la organización para la que desarrollamos una aplicación recibe frecuentemente documentos en formato XML y mediante un hoja de transformación podemos mostrar el contenido del documento.
Vamos a utilizar el documento XML que se genera en otra de mis publicaciones (XML y ADO.NET - parte 1).
El código aspx del formulario es muy sencillo:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm8.aspx.cs" Inherits="ADO2.WebForm8" ValidateRequest="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Panel ID="pnlTransform" runat="server" GroupingText="Transformación XML">
<asp:Xml ID="xmlTransform" runat="server" ></asp:Xml>
<br />
<asp:Button ID="btnDoTransformation" runat="server"
Text="Realizar Transformación" onclick="btnDoTransformation_Click" />
<br />
</asp:Panel>
</div>
</form>
</body>
</html>
Observen que se incorpora un panel (solo para organizar las cosas), luego un XML Web Server Control (se encuentra en la barra de herramientas donde están todos los controles de ASP.NET) y un botón para justamente realizar la transformación.
El código asociado es el siguiente:
using System;
namespace ADO2
{
public partial class WebForm8 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnDoTransformation_Click(object sender, EventArgs e)
{
DoTransformation();
}
/// <summary>
/// Realiza la transformacion de un documento XML de acuerdo a las
/// instrucciones del documento XSLT
/// </summary>
protected void DoTransformation()
{
xmlTransform.DocumentSource = Server.MapPath("~/Provincia.xml");
xmlTransform.TransformSource = Server.MapPath("~/Provincia.xslt");
}
}
}
Vemos que en el evento que captura el "click" del botón invocamos la transformación simplemente asignando el documento origen (el XML) y el documento con la especificación de la transformación (el XSLT).
A continuación está la hoja de transformación (Provincia.XSLT)
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table>
<xsl:for-each select="NewDataSet/Provincia">
<tr>
<xsl:apply-templates select="ID" />
<xsl:apply-templates select="Nombre" />
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="ID">
<td>
Código: <xsl:apply-templates />
</td>
</xsl:template>
<xsl:template match="Nombre">
<td>
Nombre: <span style="font-size:20pt;"><xsl:apply-templates /></span>
</td>
</xsl:template>
</xsl:stylesheet>
Bueno lo que hace es realmente una estupidez (no hace falta que me lo digan
), pero la idea es que podamos ver el potencial de todo lo que se puede hacer con este simple componente.
Espero que les sirva.