Programación en castellano
Inicio > Taller PHP > Internet > ASP > Desarrollo de un libro de visitas usando XML y ASP
-Artículos

Desarrollo de un libro de visitas usando XML y ASP

1 . El fichero de datos
2 . La transformación a HTML
3 . El código ASP

Artículo cedido por La página de Alfredo Reino.

El fichero de datos

El objeto de este mini-tutorial es desarrollar una aplicación práctica sencilla utilizando XML (eXtended Mark-up Language) y ASP (Active Server Pages). Para saber un poco más de XML, visita la "Introducción a XML en castellano" o cualquiera de las miles de páginas que existen en la red sobre el tema.

Para almacenar las firmas de los visitantes a nuestro website vamos a utilizar un documento XML de la siguiente forma:

<?xml version="1.0" encoding="ISO-8859-1"?>
<guestbook>
  <item>
    <author>Andres</author>
    <email>andres@correo.com</email>
    <datetime order="200005161603">16-5-2000 (16:03)</datetime>
    <ip>197.50.123.14</ip>
    <text>Hola, me gusta tu tutorial</texto>
  </item>
  <item>
    <author>Juan</author>
    <email>juan@email.es</email>
    <datetime order="200005171413">17-5-2000 (14:13)</datetime>
    <ip>195.2.170.174</ip>
    <text>Saludos desde Albacete</text>
  </item>
</guestbook>
		

Este documento XML contiene un elemento guestbook, que a su vez contiene elementos item. Un DTD para este documento sería el siguiente;

<!ELEMENT guestbook (item*)>
<!ELEMENT item (author, email, datetime, ip, text)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT ip (#PCDATA)>
<!ELEMENT text (#PCDATA)>
<!ELEMENT datetime (#PCDATA)>
  <!ATTLIST datetime order CDATA #REQUIRED>
		

La razón de almacenar la fecha y hora de dos maneras diferentes en el elemento datetime es tener un formato para visualización (dd-mm-aaaa hh:mm) y otro para ordenación (yyyymmddhhmm) sin tener que hacer cambios de formato de fecha.

La transformación a HTML

La transformación de XML a HTML la realizamos en el servidor, para asegurarnos una compatibilidad 100% con cualquier navegador web, utilizando el parser MSXML de Microsoft.

El documento XSLT que va a realizar la transformación es el siguiente (utilizando la implementación inicial de Microsoft para XSL)

<?xml version='1.0' encoding='UTF-7'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/">

<xsl:for-each select="guestbook/item" order-by="-datetime/@order">

  <P><B><xsl:value-of select="author"/></B><BR/>

  <A>
  <xsl:attribute name="href">mailto:<xsl:value-of select="email"/>
  </xsl:attribute>
  <xsl:value-of select="email"/>
  </A>
  <BR/>

  <xsl:value-of select="text"/>
  <I><xsl:value-of select="datetime"/></I> 
</xsl:for-each>

</xsl:template>
</xsl:stylesheet>
		

Es fácil ver que lo que hacemos es iterar a través de todos los elementos item contenidos en guestbook, y presentarlos como un documento HTML.

El código ASP

Por último, necesitamos dos rutinas escritas en VBScript (o JSCript) para realizar la transformación XML a HTML, y para añadir elementos item al documento XML a partir de un formulario en HTML.

El código para realizar la transformación es muy simple usando el parser de Microsoft.

xmlDoc = "data.xml"
xslDoc = "gbook.xsl"

Set xmlObj = CreateObject("Microsoft.XMLDOM")
xmlObj.Async = False
xmlObj.Load(Server.MapPath(xmlDoc))

Set xslObj = CreateObject("Microsoft.XMLDOM")
xslObj.Async = False
xslObj.Load(Server.MapPath(xslDoc))

Response.Write(xmlObj.transformNode(xslObj))
Set xmlObj = nothing
Set xslObj = nothing
		

El código para añadir un elemento item al documento XML, se basa en crear el nodo item en una cadena de texto, cargar la cadena de texto en una instancia del parser, y utilizar el método appendChild del DOM para añadirlo al documento XML que almacena nuestros datos.

stringNuevo = vbCrLf & "<item>" & vbCrLf & _
   "<author>" & nombre & "</author>" & vbCrLf & _
   "<email>" & email & "</email>" & vbCrLf & _
   "<datetime order=""" & orden & """>" & fecha & "</datetime>" & vbCrLf & _
   "<ip>" & ip & "</ip>" & vbCrLf & _
   "<text>" & text & "</text>" & vbCrLf & _
   "</item>" & vbCrLf & vbCrLf

Set xmlObj = CreateObject("Microsoft.XMLDOM")
xmlObj.Async = False
xmlObj.Load(Server.MapPath("data.xml"))

Set xmlObj2 = CreateObject("Microsoft.XMLDOM")
xmlObj2.Async = False
xmlObj2.LoadXML(stringNuevo)

Set root = xmlObj.documentElement
Set root2 = xmlObj2.documentElement

root.appendChild(root2) 
xmlObj.Save(Server.MapPath("data.xml")) 

Set xmlObj = nothing
Set xmlObj2 = nothing
		

Por fin, integrando este código en un solo fichero .ASP, y haciendo que el formulario se llame a si mismo:

<%   If Len(Trim(nombre))=0 Then 
      okay = False
      mensaje = mensaje & "El nombre es obligatorio. "
  End If

  If Len(Trim(texto))=0 Then 
      okay = False
      mensaje = mensaje & "El texto es obligatorio. "
  End If

  ip = Request.ServerVariables("REMOTE_HOST")

  fecha = Day(Now) & "-" & Month(Now) & "-" & Year(Now) 
  fecha = fecha & " (" & Hour(Now) & ":"
  If Minute(Now)<10 Then fecha=fecha & "0" 
  fecha = fecha & Minute(Now) & ")"

  orden = Year(Now)

  If Month(Now)<10 Then orden=orden & "0" 
  orden = orden & Month(Now)

  If Day(Now)<10 Then orden=orden & "0" 
  orden = orden & Day(Now)

  If Hour(Now)<10 Then orden=orden & "0" 
  orden = orden & Hour(Now)

  If Minute(Now)<10 Then orden=orden & "0" 
  orden = orden & Minute(Now)

  stringNuevo = vbCrLf & "<item>" & vbCrLf & _
    "<author>" & nombre & "</author>" & vbCrLf & _
    "<email>" & email & "</email>" & vbCrLf & _
    "<datetime order=""" & orden & """>" & fecha & "</datetime>" & vbCrLf & _
    "<ip>" & ip & "</ip>" & vbCrLf & _
    "<texto>" & texto & "</texto>" & vbCrLf & _
    "</item>" & vbCrLf & vbCrLf

  If okay Then
    Set xmlObj = CreateObject("Microsoft.XMLDOM")
    Set xmlObj2 = CreateObject("Microsoft.XMLDOM")

    xmlObj.Async = False
    xmlObj.Load(Server.MapPath("data.xml"))

    xmlObj2.Async = False
    xmlObj2.LoadXML(stringNuevo)

    Set root = xmlObj.documentElement
    Set root2 = xmlObj2.documentElement

    root.appendChild(root2) 
    xmlObj.Save(Server.MapPath("data.xml")) 
    Set xmlObj = nothing
    Set xmlObj2 = nothing
    nombre = ""
    email = ""
    texto = ""
  End If
Else
  nombre = ""
  email = ""
  texto = ""
End If

xmlDoc = "data.xml"
xslDoc = "gbook.xsl"

Set xmlObj = CreateObject("Microsoft.XMLDOM")
xmlObj.Async = False
xmlObj.Load(Server.MapPath(xmlDoc))

Set xslObj = CreateObject("Microsoft.XMLDOM")
xslObj.Async = False
xslObj.Load(Server.MapPath(xslDoc))

Response.Write(xmlObj.transformNode(xslObj))
Set xmlObj = nothing
Set xslObj = nothing
%>

<br>
<form action="gbook.asp" method="POST">
<input type="Hidden" name="x" value="x">
  <table width="95%" border="0" cellspacing="0" cellpadding="2"
         align="center" class="col">
    <tr> 
      <td width="100">Nombre</td>
      <td> 
      <input type="text" name="nombre" value="<%= nombre %>">
      </td>
    </tr>
    <tr> 
      <td width="100">Email</td>
      <td> 
      <input type="text" name="email" value="<%= email %>">
      </td>
    </tr>
    <tr> 
      <td width="100">Texto:</td>
      <td rowspan="2"> 
      <textarea rows="5" name="texto"><%= texto %></textarea>
      </td>
    </tr>
    <tr> 
      <td width="100" align="left" valign="bottom"> 
      <input type="submit" name="Submit" value=" Enviar ">
      </td>
    </tr>
  </table>
</form>
<p align="center"><font color="red"><%= mensaje %></font></p>

</body>

		
 

Últimos comentarios
Últimos 5 comentarios

Olá, adorei o seu site e gostaria de deixar este recado! Abraços, Leo (31/01/2007)

Por
Olá, adorei o seu site e gostaria de deixar este recado!

Abraços,

Leo

Errores (14/01/2007)

Por
Hola:
Estoy intentando hacer algo parecido a lo que aquí explica. Para adaptar las rutinas lo primero que he hecho es intentar reproducir lo comentado, pero da errores que parecen estar relacionados con la hoja de estilo XSL, pues IE6 responde una y otra vez que no contiene un elemento documento. La he modificado, pero sigue sin ir bien.

Errores (14/01/2007)

Por
Hola:
Estoy intentando hacer algo parecido a lo que aquí explica. Para adaptar las rutinas lo primero que he hecho es intentar reproducir lo comentado, pero da errores que parecen estar relacionados con la hoja de estilo XSL, pues IE6 responde una y otra vez que no contiene un elemento documento. La he modificado, pero sigue sin ir bien.

Funcion Practica (05/08/2006)

Por
Como desarrollar una apliacion practica de un Libro de Visitas

http://www.antiquesbeijing.com (28/07/2006)

Por
www.antiquesbeijing.comAntiguëdad Antiguö Oriental Antigüedad china mueblemobiliario antigüo La Révolución Cultural China Cerámica Porcelana Alfarería Buda Arte Bronce Cobre Bambù madera labrada Té chino Perlas&Collar Pintura Iluminación TejidosTelas Montura&EncuadernaciónMarco Mobiliario de terraza barros para el jardin casa rùstica refinamiento de la casa rustica Decorador de interiores paysaje arquitectos jardin diseñadores villa canastoscestos carteras joyas miscaelanea gabinete chino armarios sillas chinas mobiliario de Mongolia ‘despensa para taburete bancos biombos labrados puertas antigüas ruedas lacas chinas tailandesas sedas articulos de seda indumentaria antigüa Vietnamita cajas baules agarradores de pared tibetano cueropiel cajas de madera rollos afiches antigüos telas bordadas enmarcadas sideboard lamparas luminario bandejas faroles chinos Lamp Shades joyas de plata piedras alfombras un cubo o una cubeta (basins) Planters estatuas mesitas de noche mesas muebles de TV alter tables florero de esmalte jaulas Snuff Bottles Ceramicas Arte oirental anticuarios artesanías arte Dinastia MingQingChing huanghuali? fragmentos arquitectonicos troncos retratos de antepasadosancestor painting? articulos de piedras importaciones de China Santa Cruz Menlo Park armarios diseño de interiores Mobiliario asiatico y suramericano Arte para la casa accesorios de diseñadores tallermanufactura exportador reproduccion de muebles estilo rùstico del lejano oriente terracotta regalo arte tribal arte popular piedars preciosas articulos del hogar y del patio muebles de madera maciza escultura de buda manufactura y suplidor
http://www.antiquesbeijing.com
sales@antiquesbeijing.com
 
Tienda
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados