27.06.2014 Views

INFORMATICA MEDICA

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>INFORMATICA</strong> <strong>MEDICA</strong><br />

15. Usare XML con ADO.NET<br />

Prof. Mauro Giacomini


Sommario<br />

• Relazione fra DataSet e XML<br />

• Sincronizzazione fra DataSet e<br />

XMLDataDocument<br />

• Manipolazione di documenti XML con<br />

XMLDataDocument<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


DataSet e XML<br />

• Metodi di DataSet per interagire con XML in<br />

lettura e scrittura<br />

• Generare dei file XML per rappresentare<br />

• la struttura del DataSet (schema)<br />

• Il contenuto dei DataTable (contenuto)<br />

• Oppure schema e contenuti assieme<br />

• Leggere file XML per produrre<br />

• Strutture dati all’interno di DataSet<br />

• Caricare dati in una struttura esistente<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


Metodo WriteXmlSchema<br />

• Metodo della classe DataSet<br />

• Consente di generare un file XML<br />

contenente tutte le informazioni necessarie<br />

a ricreare un DataSet con la stessa struttura<br />

del DataSet che lo ha generato<br />

• Dim ds as New DataSet<br />

• Ds.WriteXmlSchema ()<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


Filestream<br />

• Oggetto del namespace System.IO che consente di<br />

• scrivere i dati contenuti in una struttura dati (dati in un array ad<br />

esempio) in un file<br />

• Leggere i dati contenuti in un file e trasferirli in una struttura dati<br />

• Da specificare:<br />

• Nome file<br />

• Modo di agire sul file<br />

• Create: crea un nuovo file<br />

• Append: aggiunge alla fine del file<br />

• Open: apertura in lettura<br />

• Dim Fs as New FileStream (strNomeFile, _<br />

FileMode.Create)<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


XmlTextWriter<br />

• Appartiene al namespace System.Xml ma richiede<br />

anche variabili da System.Text<br />

• Consente di scrivere file espressi in formato Xml<br />

Dim Fs as New FileStream (strNomeFile, FileMode.Create)<br />

Dim Xw as New XmlTextWriter (Fs, Encoding.Unicode)<br />

• Vuole un file stream dove mettere l’uscita e gli<br />

strumenti di codifica<br />

• Può essere passato a un WriteXmlSchema<br />

ds.WriteXmlSchema (xw)<br />

xw.Close<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


WriteXml<br />

• Si esegue per trasferire in formato XML il contenuto del<br />

dataset.<br />

• Oltre al file dove scrivere si deve indicare anche il<br />

parametro XmlWriteMode<br />

• Valori di XmlWriteMode<br />

IgnoreSchema: scrive solo il contenuto del DataSet senza<br />

informazioni sullo schema<br />

WriteSchema: scrive sia il contenuto del DataSet sia lo schema<br />

DiffGram: scrive il contenuto del DataSet in formato DiffGram<br />

(contenuti originali e quelli correnti)<br />

• In alcuni casi si possono mettere anche solo i cambiamenti:<br />

eseguire il metodo GetChanges del DataSet e poi scrivere<br />

il file XML del DataSet appena generato<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


Uso di WriteXml<br />

Dim ds as New DataSet<br />

Dim fs as New FileStream (“Schema.xml”, FileMode.Create)<br />

Dim xw as New XmlTextWriter (fs, Encoding.Unicode)<br />

ds.WriteXml (xw, XmlWriteMode.IgnoreSchema)<br />

Oppure<br />

ds.WriteXml (xw, XmlWriteMode.WriteSchema)<br />

Oppure<br />

ds.WriteXml (xw, XmlWriteMode.DiffGram)<br />

xw.Close<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


ReadXmlSchema<br />

• Consente di leggere un file XML con<br />

informazioni con lo schema di un dataset e<br />

di generare in un DataSet dell’applicazione le<br />

stesse tabelle e le stesse relazioni tra di loro.<br />

• Dim ds As New DataSet<br />

• Dim fs As New FileStream (“Schema.xml”, FileMode.Open)<br />

• Dim xr As New XmlTextReader (fs)<br />

• ds.ReadXmlSchema (xr)<br />

• xr.Close<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


ReadXml<br />

• Consente di leggere un file XML contenente<br />

dei dati al fine di caricarli in DataTable di<br />

DataSet.<br />

• Se il file XML contiene anche gli schemi il<br />

metodo ReadXml consente di costruire anche<br />

le strutture dati richieste.<br />

• Per questo ReadXml ha un parametro in più:<br />

XmlReadMode<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


Valori di XmlReadMode (1)<br />

• IgnoreSchema: ignora ogni informazione relativa<br />

allo schema eventualmente contenuta nel file e<br />

carica i dati nei DataTable già presenti nel DataSet<br />

• ReadSchema: Legge le informazioni relative allo<br />

schema contenute nel file, genera i DataTable e<br />

dopo carica i dati in esse. Se il DataSet conteneva<br />

già altre tabelle, il metodo aggiunge quelle<br />

richieste, ma si genera un errore se si cerca di<br />

creare un oggetto già esistente<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


Valori di XmlReadMode (2)<br />

• InferSchema: ignora le informazioni relative allo<br />

schema nel file e cerca di inferire lo schema dai dati<br />

presenti. Se il DataSet contiene già uno schema, il<br />

metodo aggiunge le tabelle o le colonne<br />

eventualmente necessarie<br />

• DiffGram: serve per leggere un file contenente un<br />

DiffGram. Il DataSet ricevente è aggiornato con le<br />

modifiche riportate nel file.<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


Valori di XmlReadMode (3)<br />

• Fragment: serve per leggere file XML generati a<br />

seguito dell’esecuzione di query di lettura che<br />

restituiscano i dati in formato XML<br />

• Auto: sceglie il valore più appropriato di questo<br />

parametro in funzione del contenuto del file e dello<br />

stato del DataSet.<br />

Dim ds As New DataSet<br />

Dim fs As New FileStream (“Schema.xml”,FileMode.Open)<br />

Dim xr As New XmlTextReader (fs)<br />

Ds.ReadXml(xr, XmlReadMode.IgnoreSchema)<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


GetXmlSchema - GetXml<br />

• Sempre metodi del DataSet<br />

• GetXmlSchema: restituisce una stringa con la<br />

rappresentazione in formato XML dello schema del<br />

DataSet<br />

• GetXml: restituisce una stringa con la<br />

rappresentazione in formato XML dei dati del<br />

DataSet (non ha parametri simili a XmlWriteMode,<br />

funziona in modo simile a IgnoreSchema).<br />

• Aggiunta di una form di dettaglio dove in una<br />

textbox vegano visualizzati di risultati delle funzioni<br />

GetXmlSchema e GetXml.<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


XmlDataDocument<br />

• Oggetto utile per mantenere la sincronizzazione tra<br />

la rappresentazione relazionale dei dati (DataSet) e<br />

quella gerarchica (XML)<br />

• Del namespace System.Xml<br />

• Per caricare<br />

Dim xd As New XmlDataDocument<br />

xd.load(“f1.xml”)<br />

• Per specificare un legame a un DataSet già<br />

istanziato e popolato<br />

• Dim xd As New XmlDataDocument (ds)<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


Esempio di sincronizzazione<br />

• Se non c’è il DataSet, va creato, sincronizzarlo con il<br />

XmlData e popolare solo uno dei due oggetti<br />

Dim ds As New DataSet<br />

Dim xd As New XmlDataDocument (ds)<br />

xd.load(“file.xml”)<br />

Oppure<br />

Dim ds As New DataSet<br />

Dim xd As New XmlDataDocument<br />

xd.load(“file.xml”)<br />

ds=xd.DataSet<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


XmlNode<br />

• Tag: elemento più semplice di un file XML<br />

• XmlNode: unità elementare di<br />

XmlDataDocument<br />

• Contiene sostanzialmente un record della<br />

tabella<br />

• Diversi tipi di nodi<br />

• Proprietà XmlNodeType<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


XmlNodeType (valori - 1)<br />

• Attribute: tag attributo, può essere seguito da un<br />

child di tipo text, non è child di nulla<br />

• Comment: commento nel testo xml, non ha child,<br />

può essere child di oggetti di tipo Document e<br />

Element<br />

• Document: identifica l’intero documento, può essere<br />

seguito da: element, xmlDeclaration, Comment<br />

• DocumentFragment: frammento di documenti, può<br />

essere seguito da: element, xmlDeclaration,<br />

Comment<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14


XmlNodeType (valori - 2)<br />

• Element: elemento di inizio di una struttura, può<br />

essere seguito da Element, Comment, Text<br />

• EndElement: indica la fine di un elemento<br />

• Text: testo contenuto in un nodo, non ha figli, può<br />

essere figlio di Attribute, Element o<br />

DocumentFragment<br />

• XmlDeclaration: dichiarazione dello standard XML<br />

usato. Primo nodo di un documento.<br />

Inf. Med. - 15. Uso di XML con<br />

ADO.NET - A.A. 2013/14

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!