En realidad no debería ser así, la tecnología está bastante madura en cuanto a la manipulación de contenidos XML, y es mucho más fácil aún si haces uso de una tecnología como .NET.
En este post vamos a mostrar contenidos XML en una página aspx, vamos a demostrar lo fácil que es aplicar una hoja de estilos XSLT a un documento XML.
Un documento XML guarda datos y un documento XSLT guarda una plantilla que permitirá darle una presentación más amigable a un documento XML. Esta hoja XSLT debe conocer la estructura del archivo XML para poder aplicar sus estilos.
No es necesario usar ASP.NET para mostrar un documento XML formateado via XSLT en un browser… esto se puede hacer de una manera muy simple:
Sample1.xml:
<?xml version="1.0" encoding="iso-8859-1" ?> <?xml-stylesheet type="text/xsl" href="Sample1.xslt"?> <Usuarios> <Usuario imagen="images/1.png"> <id>11</id> <Nombre>Juan Cotrina</Nombre> <Email>Juan1@hotmail.com</Email> </Usuario> </Usuarios>
Sample1.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="Usuarios"> <table> <tr> <th>ID</th> <th>Nombre</th> <th>Email</th> <th></th> </tr> <tr> <td> <xsl:value-of select="Usuario/id" /> </td> <td> <xsl:value-of select="Usuario/Nombre" /> </td> <td> <xsl:value-of select="Usuario/Email" /> </td> </tr> </table> </xsl:template> </xsl:stylesheet>
Como ven, el archivo XML ya está haciendo una llamada a la hoja de estilos XSLT… entonces, si tú haces click derecho sobre el archivo Sample1.xml y eliges Ver en el browser… el archivo se visualizará como si fuera un archivo html cualquiera. Aunque tal vez no se vea bien.
No creo que necesite mucha explicación este ejemplo, sólo que la hoja de estilos xslt tiene una plantilla html combinada con las etiquetas Usuarios/Usuario/… que son precisamente las etiquetas que contiene el archivo xml, y esta es la forma de relacionar los datos del archivo XML con la hoja de estilos XSLT.
Hasta aquí no he usado .NET ni ASP.NET, parece que no fuera necesario… pero sí es necesario. Por qué?
El problema es que la mayoría de browsers no hacen la transformación como debieran y no muestran el XML combinado con el XSLT para dar paso a un contenido HTML… es por eso que hay que hacer uso de ASP.NET, el cual se toma el trabajo de hacer esa conversión y mostrar de manera correcta el contenido transformado en el browser.
Ahora vamos a mostrar un ejemplo más completo, un archivo xml con más contenido, una hoja de estilos mejor formateada… y ya no mostraremos directamente el archivo xml en el browser… sino a través de una página aspx, y haciendo uso de un control ASP.NET llamado asp:Xml, el cual muchas veces ha pasado desapercibido.
Sample2.xml:
<?xml version="1.0" encoding="iso-8859-1" ?> <?xml-stylesheet type="text/xsl" href="sample2.xslt"?> <Usuarios> <Usuario Imagen="images/1.png"> <id>11</id> <Nombre>Loco loco</Nombre> <Email>email1@hotmail.com</Email> </Usuario> <Usuario Imagen="images/2.jpg"> <id>22</id> <Nombre>Johnny Serrano</Nombre> <Email>email2@hotmail.com</Email> </Usuario> <Usuario Imagen="images/3.gif"> <id>33</id> <Nombre>Mr Beans</Nombre> <Email>email3@hotmail.com</Email> </Usuario> <Usuario Imagen="images/4.jpg"> <id>44</id> <Nombre>ASP.NET Developer</Nombre> <Email>email4@hotmail.com</Email> </Usuario> </Usuarios>
Sample2.xslt:
<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output doctype-public="HTML"/> <xsl:template match="Usuarios"> <table> <tr> <th>ID</th> <th></th> <th>Nombre</th> <th>Email</th> <th></th> </tr> <xsl:for-each select="Usuario"> <tr> <td> <xsl:value-of select="id"/> </td> <td> <xsl:variable name="img" select="@Imagen" /> <img src="{$img}" /> </td> <td> <xsl:value-of select="Nombre"/> </td> <td> <xsl:value-of select="Email"/> </td> <td> <xsl:variable name="url" select="id" /> <a href="Details.aspx?id={$url}" >Detalles</a> </td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet>
WebForm1.aspx:
<html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>Mostrar contenido xml en página aspx</title> <link href="style.css" rel="stylesheet" type="text/css" /> </head> <body> <form id="form1" runat="server"> <asp:Xml ID="Xml1" runat="server"></asp:Xml> </form> </body> </html>
WebForm1.aspx.cs:
cabecera:
using System; using System.Xml; using System.Xml.Xsl;
Page Load:
protected void Page_Load(object sender, EventArgs e) { if (Page.IsPostBack) return; XmlDocument docXML = new XmlDocument(); docXML.Load(Server.MapPath("sample2.xml")); XslTransform docXSL = new XslTransform(); docXSL.Load(Server.MapPath("sample2.xslt")); Xml1.Document = docXML; Xml1.Transform = docXSL; }Ahora ejecute la página WebForm1.aspx para ver los resultados… debiera ver algo como la imagen de arriba.
Ejecúten la página en cualquier browser y verán que en todos los browsers se ha efectuado la transformación de manera correcta, gracias a ASP.NET.
Es todo por ahora, espero que les sea de utilidad
No hay comentarios.:
Publicar un comentario