Microsoft .Net estrapolare da un file XML un file immagine

Articolo che fornisce interessanti spunti su come utilizzare i file xml per l'interscambio di informazioni.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

In questo articolo vedremo come estrapolare da un valore presente in un nodo di un file XML le informazioni per generare un file di tipo immagine.
L’articolo vuole fornire le basi e le indicazioni su come estrapolare le informazioni come quelli di un file immagine da un file xml usato per la gestione dei dati, come sono appunto i file XML e salvare i file in qualsiasi formato.
Verranno presi i linguaggi più utilizzati in ambito .Net, quali appunto C# e VB.Net.


Creazione del progetto


Si crea un nuovo progetto di tipo “Windows Application”, ma il codice che andremo ad utilizzare si può utilizzare anche per il mondo web.
Aggiungiamo due pulsante, uno permette di generare il file XML, in questo modo il lettore avrà uno scenario più definito e soprattutto  la prassi per replicare i vari passaggi presenti in questo articolo e sia per verificare la correttezza del codice.
Un pulsante verrà utilizzato per la creazione del file XML ed un altro per la lettura dei dati e di conseguenza creazione del file di tipo immagine.
Dovremmo avere anche un file immagine per vedere il risultato finale.
In un pulsante, scriviamo nella proprietà “Text” il valore “Crea File XML” e nella proprietà “Name” il valore “BtnCreaFileXML”.
Mentre nell’altro pulsante, scriviamo nella proprietà “Text” il valore “Genera File immagine” e nella proprietà “Name” il valore “BtnLeggiFileXml”

Stesura del codice

A questo punto faccio doppio click sul pulsante uno dei due oppure passiamo direttamente in visualizzazione codice della nostra form
Dobbiamo aggiungere lo spazio dei nomi per la gestione dei file XML e quello relativo alla gestione dei file.
Qui di seguito il frammento di codice per entrambi i linguaggi.

VB.Net
Imports System.IO
Imports System.Xml
C# using System.IO;
using System.Xml;

Ora dobbiamo passare all’evento click del pulsante per scrivere il codice per la creazione del file.
Nell’evento click del pulsante scriviamo le varie istruzioni che ci permettono di creare un file XML con due nodi uno con il nome del file e l’altro con lo Stream del file, in questo modo sarà possibile poi leggerlo e creare il file in questione.
Qui di seguito il frammento di codice nell’evento click del pulsante per la creazione del file XML.

VB.Net
Private Sub BtnCreaFileXML_Click(sender As Object, e As EventArgs) Handles BtnCreaFileXM.Click
Dim risultato = File.ReadAllBytes("D:\test.jpg")
Dim documento = New XDocument(New XElement("root", New XElement("nomefile", "testNuovo.jpg"), New XElement("arrayfile", Convert.ToBase64String(risultato))))
documento.Save("file.xml")
End Sub
C#
private void BtnCreaFileXML_Click(object sender, EventArgs e)
{
var risultato = File.ReadAllBytes("D:\\test.jpg");
var documento = new XDocument(new XElement("root", new XElement("nomefile", "testNuovo.jpg"), new XElement("arrayfile", Convert.ToBase64String(risultato))));
documento.Save("file.xml");
}

Come si vede dal frammento di codice precedente, viene letto lo stream del file immagine che si vuole salvare nel file XML e poi tramite la classe “Xdocument” si crea un file xml con i vari nodi.
Ora dobbiamo scrivere il codice per la generazione del file di tipo immagine, ma può essere anche altro formato, prendendo le informazioni situate nel nodo riguardante il nodo “arrayfile”.
Qui di seguito il codice dell’evento click per il pulsante “BtnLeggiFileXML”, per entrambi i linguaggi.

VB.Net
Private Sub BtnLeggiFileXML_Click(sender As Object, e As EventArgs) Handles BtnLeggiFileXML.Click
Dim doc As XmlDocument = New XmlDocument()
doc.LoadXml(System.IO.File.ReadAllText("file.xml"))
Dim node As XmlNode = doc.SelectSingleNode("//arrayfile")
Dim nodeNomeFile As XmlNode = doc.SelectSingleNode("//nomefile")
Dim Valore As String = node.InnerText
Dim nomeFile As String = nodeNomeFile.InnerText
Dim binaryData As Byte()
binaryData = System.Convert.FromBase64String(Valore)
Dim fs As FileStream = New FileStream("D:\" & nomeFile, FileMode.Create, FileAccess.Write)
fs.Write(binaryData, 0, binaryData.Length)
fs.Close()
End Sub
C#
private void BtnLeggiFileXML_Click(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(System.IO.File.ReadAllText("file.xml"));
XmlNode node = doc.SelectSingleNode("//arrayfile");
XmlNode nodeNomeFile = doc.SelectSingleNode("//nomefile");
string Valore = node.InnerText;
string nomeFile = nodeNomeFile.InnerText;
byte[] binaryData;
binaryData =  System.Convert.FromBase64String(Valore);
FileStream fs = new FileStream("D:\\" + nomeFile, FileMode.Create, FileAccess.Write);
fs.Write(binaryData, 0, binaryData.Length);
fs.Close();
}

Tramite la classe Xmldocumento, si leggono le informazioni presenti nei nodi del file XML, mentre la classe FileStream, andremo a creare il file.
Ora non ci resta che testare i vari frammenti di codice eseguendo il nostro applicativo.

Conclusioni

L’articolo ha voluto fornire le informazioni e le basi, evidenziando come i file XML possono tornare utile anche in questi contesti di interscambio tra sistemi applicativi e sistemi operativi.
Tecnica che può tornare utile in vari contesti industriali o di servizi, come il mondo bancario per esempio.