Scrittura del contenuto di dataset come dati XML

In ADO.NET è possibile scrivere una rappresentazione XML di un DataSet, con o senza schema. Se le informazioni relative allo schema sono incluse inline con il flusso o documento XML, tali informazioni verranno scritte usando il linguaggio XSD (XML Schema Definition Language). Nello schema sono contenute le definizioni delle tabelle del DataSet, oltre alle definizioni delle relazioni e dei vincoli.

Quando un DataSet viene scritto sotto forma di dati XML, le righe del DataSet vengono scritte usando le versioni correnti. È tuttavia possibile scrivere un DataSet in formato DiffGram, in modo da consentire l'inclusione sia dei valori correnti che dei valori originali delle righe.

È possibile scrivere la rappresentazione XML del DataSet in un file, un flusso, un XmlWriter o una stringa. Queste opzioni forniscono una notevole flessibilità per la modalità di trasporto della rappresentazione XML del DataSet. Per ottenere una rappresentazione XML del DataSet sotto forma di stringa, usare il metodo GetXml, come illustrato nell'esempio seguente.

Dim xmlDS As String = custDS.GetXml()  
string xmlDS = custDS.GetXml();  

Il metodo GetXml restituisce la rappresentazione XML del DataSet senza alcuna informazione relativa allo schema. Per scrivere le informazioni relative allo schema dal DataSet (come XML Schema) a una stringa, usare GetXmlSchema.

Per scrivere un DataSet in un file, un flusso o un XmlWriter, usare il metodo WriteXml. Il primo parametro passato a WriteXml è la destinazione dell'output XML. Passare ad esempio una stringa contenente un nome file, un oggetto System.IO.TextWriter e così via. Per specificare la modalità di scrittura dell'output XML, è possibile passare un secondo parametro facoltativo di XmlWriteMode.

La tabella seguente mostra le opzioni disponibili per XmlWriteMode.

Opzione XmlWriteMode Descrizione
IgnoreSchema Scrive i contenuti correnti del DataSet sotto forma di dati XML, senza schema XML. Si tratta dell'impostazione predefinita.
WriteSchema Scrive il contenuto corrente dell'oggetto DataSet come dati XML con la struttura relazionale come XML Schema inline.
DiffGram Scrive l'intero oggetto DataSet come DiffGram, inclusi i valori originali e quelli correnti. Per altre informazioni, vedere DiffGram.

Quando si scrive una rappresentazione XML di un oggetto DataSet contenente oggetti DataRelation, può essere utile che nel flusso o documento XML risultante siano presenti le righe figlio di ogni relazione annidata all'interno dei relativi elementi padre. A tale scopo, impostare la proprietà Nested di DataRelation su true quando si aggiunge DataRelation al DataSet. Per altre informazioni, vedere Annidamento di oggetti DataRelation.

Di seguito sono riportati due esempi di scrittura della rappresentazione XML di un DataSet in un file. Nel primo esempio il nome file per il flusso o documento XML risultante viene passato come stringa a WriteXml. Nel secondo esempio viene passato un oggetto System.IO.StreamWriter.

custDS.WriteXml("Customers.xml", XmlWriteMode.WriteSchema)  
custDS.WriteXml("Customers.xml", XmlWriteMode.WriteSchema);  
Dim xmlSW As System.IO.StreamWriter = New System.IO.StreamWriter("Customers.xml")  
custDS.WriteXml(xmlSW, XmlWriteMode.WriteSchema)  
xmlSW.Close()  
System.IO.StreamWriter xmlSW = new System.IO.StreamWriter("Customers.xml");  
custDS.WriteXml(xmlSW, XmlWriteMode.WriteSchema);  
xmlSW.Close();  

Mapping di colonne a elementi, attributi e testo XML

La proprietà ColumnMapping dell'oggetto DataColumn consente di specificare la modalità di rappresentazione di una colonna di una tabella in XML. La tabella seguente mostra i diversi valori MappingType per la proprietà ColumnMapping di una colonna di una tabella e il valore XML risultante.

Valore MappingType Descrizione
elemento Si tratta dell'impostazione predefinita. La colonna viene scritta sotto forma di elemento XML. ColumnName rappresenta il nome dell'elemento e i contenuti della colonna vengono scritti come testo dell'elemento. Ad esempio:

<ColumnName>Column Contents</ColumnName>
Attributo La colonna viene scritta sotto forma di attributo XML dell'elemento XML per la riga corrente. ColumnName rappresenta il nome dell'attributo e i contenuti della colonna vengono scritti sotto forma di valore dell'attributo. Ad esempio:

<RowElement ColumnName="Column Contents" />
SimpleContent I contenuti della colonna vengono scritti sotto forma di testo nell'elemento XML per la riga corrente. Ad esempio:

<RowElement>Column Contents</RowElement>

Notare che non è possibile impostare SimpleContent per una colonna di una tabella contenente colonne Element o relazioni annidate.
Hidden La colonna non viene scritta nell'output XML.

Vedi anche