Un semplice forum con ASP e XML

2 pagine in totale: <<Indietro 1 [2]

L'implementazione

Come abbiamo detto, Elenco.asp è lo script che visualizza la struttura del forum nel frame superiore. Il cuore del suo funzionamento sta in queste linee di codice:

<%
'
' Scrive l'elenco dei messaggi dal file messaggi.xml
'
sub scrivifiglio(figlio,tabula)
for y = 0 to figlio.childnodes.length-1
  set attuale=figlio.childnodes.item(y)
  tot=tot+1
  if tabula>10 then tabula=10
'
%>
<tr>
<td width=1 bgcolor=#000000></TD>
<td nowrap>&nbsp;
<%for u=1 to tabula:response.write "&nbsp;&nbsp;&nbsp;":next
%>
<img src="busta.gif">
<a href="dettagli.asp?id=<%=attuale.nodename%>" target="dettagli">
<%=attuale.getattribute("oggetto")%></a></td>
<td width=1 bgcolor=#000000></TD>
<td nowrap>
<%=attuale.getattribute("nome")%></td>
<td width=1 bgcolor=#000000></TD>
<td nowrap>
<%=attuale.getattribute("data")%></td>
<td width=1 bgcolor=#000000></TD>
<td nowrap>
<%=formatnumber(attuale.getattribute("dimensione")/1024,2)&" KB"%></td>
<td width=1 bgcolor=#000000 height=100%></TD>
</tr>
<%
'
if attuale.hasChildNodes then
call scrivifiglio(attuale,tabula+1)
end if
next
end sub
'
set xml=server.createobject("Microsoft.XMLDOM")
xml.async=false
xml.load(server.mappath("messaggi.xml"))
if xml.parseError<>0 then
  set xmlroot=xml.createElement("messaggi")
  xml.appendchild xmlroot
  end if
tot=0
call scrivifiglio(xml.documentelement,0)
set xml=Nothing
'
%>

Si noti la sub ?scrivifiglio? che legge sequenzialmente il file XML e grazie alla proprietà .hasChildNodes permette di leggere qualsiasi nodo all'interno del precedente.

Infine, lo script principale apre il file XML e passa alla funzione ?scrivifiglio? la root di tale documento, cominciando lo scanning del file XML alla ricerca di messaggi.

Analizziamo ora lo script Dettagli.asp.

Questo file visualizza il messaggio selezionato nel frame superiore. Accetta come parametro ?id? che identifica il messaggio da visualizzare. Se tale parametro è nullo, viene visualizzato il messaggio ?Nessun messaggio selezionato?.

Una volta preso questo valore, grazie alle funzioni viste poco fa, prenderemo i dati che ci interessano e li visualizzeremo nel frame inferiore.

<%
id = request("id")
if id = "" then
  da = ""
  oggetto = ""
  email = ""
  commento="<br>Nessun messaggio selezionato"
else
'
  set xml=server.createobject("Microsoft.XMLDOM")
  xml.async=false
  xml.load(server.mappath("messaggi.xml"))
'
  Set objNodeList = xml.getElementsByTagName(id)
  oggetto = objNodeList.item(0).getattribute("oggetto")
  da = objNodeList.item(0).getattribute("nome")
  email = objNodeList.item(0).getattribute("email")
  commento = objNodeList.item(0).getattribute("commento")
'
  set xml=Nothing
'
end if
%>

Ecco infine una schermata dei file richiedi.asp e inserisci.asp:

Immagine

Il primo script visualizza il form in cui inserire i dati, il secondo inserisci i dati inseriti dall'utente nel file XML. Anche in questo caso lo script ?richiedi.asp? accetta un parametro (id), se è nullo il messaggio dev'essere inserito come primo nodo nel file XML, altrimenti i dati inseriti vengono memorizzati nella giusta posizione del nodo selezionato dall'utente.

Qui sono presenti due nuove funzioni:

.insertBefore(newNode, root.childNodes.Item(0))

Che inserisce il nuovo nodo (in questo caso il nuovo messaggio) all'inizio (before) di qualsiasi altro messaggio.

.removeChild(root.childNodes.Item(numero_nodo))

Che cancella un nodo dal file XML.

Conclusioni

Da quanto si è visto sinora l'XMLDOM utilizzato con le ASP permette di manipolare dei documenti XML in maniera semplice e anche abbastanza intuitiva. La trattazione di questi tipi di documenti non dev'essere vista come l'utilizzo di un database, ma come un modo avanzato di manipolazione di un file di testo (si veda l'open ad inizio dello script, e alla fine, il save per memorizzare il documento modificato in tutti gli script visti sinora).

Le funzioni nell'XMLDOM sono numerose e coprono pressoché tutto il fabbisogno che un programmatore ASP può aver bisogno con i suoi script. Per ulteriori informazioni invito a visitare la sezione relativa all'SDK su MSDN.

Approfondimenti

2 pagine in totale: <<Indietro 1 [2]

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC