Introduzione
Vedremo in questo nuovo articolo su Silverlight, come utilizzare i file xml, per leggere e scrivere i dati.
I file XML, da alcuni anni, si usano per la gestione dei dati, molto importante infatti è questo protocollo, perché permette di far comunicare, sistemi ed applicazioni diversi fra loro.
L’articolo fornisce le basi per utilizzare i file xml.
Creazione del progetto
Si crea un nuovo progetto di tipo Silverlight 4, in base al linguaggio di proprio gradimento.
Aggiungete nel progetto un nuovo file XML, (dalla finestra esplora soluzione, tasto destro sul nome del progetto->aggiungi nuovo elemento e file XML), dopo aver aggiunto un nuovo file XML nel progetto, modificatelo, come nell’esempio seguente.
<?xml version="1.0" encoding="utf-8" ?>
<!-- nodi-->
<Items>
<Nome attributo='testo'>
Emanuele</Nome>
<Cognome>Mattei</Cognome>
</Items>
Terminata questa operazione, passiamo in visualizzazione codice XAML, della nostra classe page, ossia la pagina dove andremo a leggere e scrivere i dati XML.
Aggiungente due pulsanti, i quali avranno il ruolo di leggere i dati e scrivere i dati.
In un controllo pulsante, impostate la proprietà “Text” con Leggi e la proprietà “Name” in btnCarica, mentre per l’altro pulsante, impostate la proprietà “Text” in Scrivi e la proprietà “Name in “BtnScrivi”.
Terminato ciò, passiamo in visualizzazione codice ed inseriamo gli spazio dei nomi per la gestione dei file XML.
Qui di seguito si riportano i frammenti di codice delle suddette operazioni
VB.Net
Imports System.Xml
Imports System.IO
Imports System.Text
Imports System.IO.IsolatedStorage
C#
using System.Xml;
using System.IO;
using System.Text;
using System.IO.IsolatedStorage;
Lo spazio dei nomi, forniscono le classi per la gestione dei file XML, file fisici, per la gestione del testo e per il salvataggio isolato.
Passiamo in visualizzazione disegno e facciamo doppio click sul pulsante di lettura, quello relativo alla lettura dei dati.
Nell’evento click, che viene generato nel codice, scriviamo il codice per la lettura dei file.
In particolare faremo uso della classe xmlreader per leggere i vari valori.
Qui di seguito, si riporta un frammento di codice per il linguaggio VB.Net e C#
VB.Net
Private Sub BtnCarica_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles BtnCarica.Click
' Leggo il file
Using lettura As XmlReader = XmlReader.Create("XMLdati.xml")
Dim testo As String = ""
While lettura.Read()
'Ciclo per tutti i nodi
Select Case lettura.NodeType
Case XmlNodeType.Element
testo += vbCrLf & " Nome Elemento:" & lettura.Name & " Attributo:" & lettura.GetAttribute("attributo")
Case XmlNodeType.Text
testo += vbCrLf & " Testo Elemento:" & lettura.Value
Case XmlNodeType.XmlDeclaration Or XmlNodeType.ProcessingInstruction
testo += vbCrLf & " Dichirazione:" & lettura.Name & " " & lettura.Value
Case XmlNodeType.Comment
testo += vbCrLf & " Commento:" & lettura.Value
End Select
End While
textBlock1.Text = testo
End Using
End Sub
C#
private void BtnCarica_Click(object sender, RoutedEventArgs e)
{
// Leggo il file
using (XmlReader Lettura = XmlReader.Create("XMLdati.xml"))
{
string Testo = "";
//Ciclo per tutti i nodi
while (Lettura.Read())
{
switch (Lettura.NodeType)
{
case XmlNodeType.Element:
Testo += "\n Nome Elemento:" + Lettura.Name + " Attributo:" + Lettura.GetAttribute("attributo");
break;
case XmlNodeType.Text:
Testo += "\n Testo Elemento:" + Lettura.Value;
break;
case XmlNodeType.XmlDeclaration:
case XmlNodeType.ProcessingInstruction:
Testo += "\n Dichirazione:" + Lettura.Name + " " + Lettura.Value;
break;
case XmlNodeType.Comment:
Testo += "\n Commento:" + Lettura.Value;
break;
}
}
textBlock1.Text = Testo;
}
}
A questo punto, non ci resta che scrivere il codice per il salvataggio dei dati.
In visualizzazione grafica, facciamo doppio click sul pulsante destinato al salvataggio dei dati, in questo modo viene generato in automatico il codice per il gestore dell’evento click del pulsante.
In visualizzazione codice, scriviamo il codice che ci permette di salvare i dati, il tutto tramite l’utilizzo delle classi classi IsolatedStorageFile, per la gestione di archiviazione isolata, xmlwriteSettings e XmlWrite, per gestione i dati nel file xml ed infine la classe STreamReader per la lettura del file. Nei commenti trovate le indicazioni delle varie righe di codice
VB.Net
Private Sub BtnScrivi_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles BtnScrivi.Click
'Gestione archiviazione isolata
Using isoStore As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication
' Creo un file
Using isoStream As IsolatedStorageFileStream = New IsolatedStorageFileStream("NomeFile.xml", FileMode.Create, isoStore)
' imposta l'intestazione del file
Dim settings As New XmlWriterSettings
settings.Indent = True
'Eseguo la generazione e la compilazione dei vari campi
Using writer As XmlWriter = XmlWriter.Create(isoStream, settings)
'commento
writer.WriteComment("Commento in XML")
'Creo un elemento, ossia item, che contiene elementi con valore
writer.WriteStartElement("NodoPrincipale")
'Creo per il nodo peredecente degli attributi, di tipo namespace
writer.WriteAttributeString("xmlns", "Attributo", Nothing, "urn:valore attributo")
'Creo un attributo semplice
writer.WriteAttributeString("Attributo", "Vaolore attributo")
'SCrivo un elemento, con il valore
writer.WriteElementString("Nodo", "Valore nodo")
'Chiudo i tag aperti
writer.WriteEndElement()
'Genero il file
writer.Flush()
End Using
End Using
'Leggo il file per le modifiche
Using reader As New StreamReader(isoStore.OpenFile("NomeFile.xml", FileMode.Open))
textBlock1.Text = reader.ReadToEnd()
End Using
End Using
End Sub
C#
private void BtnScrivi_Click(object sender, RoutedEventArgs e)
{
//gestione archiviazione isolata
using (IsolatedStorageFile isoStore =
IsolatedStorageFile.GetUserStoreForApplication())
{
// Creo un file
using (IsolatedStorageFileStream isoStream =
new IsolatedStorageFileStream("NomeFile.xml",
FileMode.Create, isoStore))
{
//imposta l'intenzione del file
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
//eseguo la generazione e la compilazione dei vari campi
using (XmlWriter writer = XmlWriter.Create(isoStream, settings))
{
//commento
writer.WriteComment("Commento in XML");
//Creo un elemento, ossia item, che contiene elementi con valore
writer.WriteStartElement("NodoPrincipale");
//Creo per il nodo peredecente degli attributi, di tipo namespace
writer.WriteAttributeString("xmlns", "Attributo", null, "urn:valore attributo");
//Creo un attributo semplice
writer.WriteAttributeString("Attributo", "Vaolore attributo");
//SCrivo un elemento, con il valore
writer.WriteElementString("Nodo", "Valore nodo");
//Chiudo i tag aperti
writer.WriteEndElement();
//Genero il file
writer.Flush();
}
}
//Leggo il file per le modifiche
using (StreamReader reader = new StreamReader(isoStore.OpenFile("NomeFile.xml", FileMode.Open)))
{
textBlock1.Text = reader.ReadToEnd();
}
}
}
Conclusioni
Abbiamo visto come utilizzare il protocollo per lo scambio e gestione dei dati, XML, molto usato in vari linguaggi e tecnologie.
Silverlight, giunto alla versione 5, offre notevoli classi, da considerarlo uno strumento efficiente e con ottima flessibilità.