Una delle caratteristiche salienti della piattaforma .NET è il supporto ad XML (Bill Gates lo considera la "lingua franca" di Internet).
Ed XML sta diventando una soluzione originale per la creazione di siti amatoriali dinamici al posto dei tipici database che si utilizzano in queste occasioni, basti pensare ai BLOG che vanno tanto per la maggiore dopo le corrispondenze dal fronte del conflitto in Iraq.
Mentre è piuttosto facile scrivere del codice che inserisca o cancelli un nodo XML ho pensato di mostrarvi come implementare una utile funzionalità che dovrebbe essere presente in qualsiasi buon sito Web ovvero un campo che consenta una veloce ricerca tra le pagine che lo compongono.
( a questo proposito confronta i consigli di Jacob Nielsen il famoso guru dell'
http://www.useit.com/alertbox/20010513.html ">Usabilità Web).
Con il Classic asp questa funzione era implementata tramite l?Index Server, un componente aggiuntivo di Windows NT/2000 ( un?articolo che descrive la configurazione è qui
http://www.xefteri.com/articles/apr192002/default.aspx ">Indexing Service Win2K).
L'algoritmoL?algoritmo che vogliamo implementare è molto semplice.
Assumendo che il lettore conosca il ?funzionamento? di un file xml, ovvero la sintassi con cui sono organizzati i dati, il problema sta ovviamente nel reperire le informazioni che ci interessano.
Raggiungiamo questo obiettivo in due fasi:
- la prima fase consiste nel creare una interfaccia utente ovvero un modulo Form che contiene gli elementi nei quali inserire la nostra ricerca.
- La seconda fase consiste nell?elaborazione dei valori inseriti
Il CodiceRiferendoci alla prima fase dell?algoritmo creiamo
- un campo di tipo TextBox nel quale l?utente del nostro sito inserirà il testo che vuole cercare
- un campo DropDownList ovvero un elemento grafico che consente di effettuare una scelta tra diversi elementi attraverso una lista scorrevole. La lista scorrevole è popolata con le diverse sezione del file XML che vogliamo esplorare: nella fattispecie il mio curriculum. Se date un?occhiata al codice utilizzato vedrete che il Data Source impiegato è un Hash Table creato in maniera non dinamica.
Creiamo questi due elementi attraverso questo semplice codice che costruisce due Forms Controls
<form id="Form1" method="post" runat="server">
<asp:textbox id="TextBox1" runat="server" /><br>
<asp:dropdownlist id="DropDownList1" runat="server" />
<asp:linkbutton id="LinkButton1" runat="server" text="cerca"/>
</form>
I valori inseriti e selezionati attraverso l?interfaccia utente vanno poi a finire in un ciclo select contenuto nella subRoutine Page_Load()
NOTA: la SubRoutine Page_Load() innesca automaticamente il l?evento Page_Load della classe Page dalla quale derivano tutte le nostre pagine aspx e quindi deve essere presente in tutte le nostre applicazioni.
Select Case Request.Form("DropDownList1")
Case "sistemi-operativi"
NodeValore = objXMLDoc.SelectSingleNode ("//os[text()='" + valore + "']")
nodeVersione = objXMLDoc.SelectSingleNode ("//os[text()='" + valore + "']/versione")
If nodevalore is Nothing then
'Fai qualcosa
else
'Fai qualcos?altro
Case "linguaggi"
'eccetera eccetera
Case "databases"
'eccetera eccetera
Case "applicativi"
'eccetera eccetera
Case Else
exitSelect=""
End Select
All?interno di ogni singolo caso verificato dal ciclo select controlliamo se il valore è presente all?interno del documento xml.
Questo avviene utilizzando il metodo SelectSingleNode() dell?oggetto XMLDocument che è disponibile nel nostro codice poiché noi lo abbiamo preliminarmente importato attraverso i namespaces System.Xml.
Il parametro che passiamo a questo metodo è una query XPath.
Sebbene lo spazio dell?articolo non consenta un?approfondita spiegazione di XPath mi sembra utile approfondirlo brevemente:
Xpath è un linguaggio, specificato del W3C.org (
http://www.w3.org/TR/xpath ">W3.Org XPath) che serve per effettuare ricerca all?interno di un file XML.
Per intenderci, una specie di SQL per documenti XML!
È stato dapprima utilizzato per effettuare conversioni tra file XML di diverso formato con XSLT
(per passare, ad esempio, da un semplice documento html a uno wml )
La sintassi abbreviata di questo linguaggio assomiglia a quella utilizzata dal DOS per navigare tra le varie directory e sottodirectory.
Un buon tutorial OnLine è presente
http://www.w3schools.com/xpath/default.asp ">Tutorial XPath
Se nel documento XML esiste il valore che
1. abbiamo passato attraverso il campo textbox,
2. selezionato attraverso il ciclo select
3. elaborato attraverso il metodo SelectSingleNode()
un messaggio ci avverte che la ricerca ha avuto buon fine altrimenti un altro messaggio ci avverte che la ricerca non ha esitato nulla.
I messaggi sono realizzati, molto semplicemente, valorizzando la proprietà text di un Label Controls
NOTA: Poiché, come sanno tutti, i file XML sono Case Sensitive ovvero notano la differenza tra caratteri maiuscoli e minuscoli il valore passato viene elaborato per essere scritto tutto minuscolo attraverso la tipica funzione VBScript lcase().
Ovviamente anche i valori del file XML dovranno essere scritti in carattere minuscolo!
Nota pure che Xpath non ha una funzione analoga alla clausola LIKE di SQL, quindi le ricerche immesse dovranno essere precise altrimenti non esiteranno nulla !
Il codice dell?esempio allegato è più completo di quello esposto nell?articolo che ha scopi didattici
Un Piccolo TruccoTi è piaciuto il mio piccolo articolo e vuoi creare anche tu un file XML per configurare o creare contenuti dinamici nel tuo sito amatoriale?
Fai attenzione perché i caratteri accentati non sono supportati.
Se usi il notepad, per superare questo problema devi importare la seguente direttiva in cima al codice.
<?xml version="1.0" encoding="UTF-8" ?>
e devi salvarlo come se fosse un file qualsiasi con la codifica UTF-8
ConclusioneTutto qui!
Questo articolo, il cui codice può essere anche utilizzato per ricavare valori da un vostro file di configurazione, è un?idea per organizzare e creare pagine dinamiche utilizzando in maniera originale XML e la piattaforma .NET