Gravando o conteúdo do DataSet como dados XML

No ADO.NET, você pode gravar a representação XML de um DataSet, com ou sem seu esquema. Se as informações de esquema forem embutidas no XML embutido, elas serão gravadas através da linguagem de definição de esquema XML (XSD). O esquema contém as definições de tabela do DataSet, bem como as definições de relação e de restrição.

Quando um DataSet é gravado como dados XML, as linhas do DataSet são gravadas nas suas versões atuais. No entanto, o DataSet também pode ser gravado como um DiffGram de modo que os valores atuais e originais das linhas sejam incluídos.

A representação XML do DataSet pode ser gravada em um arquivo, um fluxo, um XmlWriter ou uma cadeia de caracteres. Essas opções proporcionam excelente flexibilidade para o transporte da representação XML do DataSet. Para obter a representação do DataSet como uma cadeia de caracteres, use o método GetXml, conforme mostrado no exemplo o seguir.

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

O GetXml retorna a representação XML do DataSet sem informações sobre o esquema. Para gravar as informações do esquema do DataSet (como esquema XML) em uma cadeia de caracteres, use GetXmlSchema.

Para gravar um DataSet em um arquivo, um fluxo ou um XmlWriter, use o método WriteXml. O primeiro parâmetro passado para WriteXml é o destino da saída XML. Por exemplo, passe uma cadeia de caracteres contendo um nome de arquivo, um objeto System.IO.TextWriter e assim por diante. Você pode passar um segundo parâmetro opcional de um XmlWriteMode para especificar como a saída XML devem ser gravada.

A tabela a seguir mostra as opções de XmlWriteMode.

Opção de XmlWriteMode Descrição
IgnoreSchema Grava o conteúdo atual do DataSet como dados XML, sem um esquema XML. Esse é o padrão.
WriteSchema Grava o conteúdo atual do DataSet como dados XML com a estrutura relacional como um esquema XML embutido.
DiffGram Grava todo o DataSet como um DiffGram, incluindo valores originais e atuais. Para obter mais informações, consulte /doc.

Ao gravar uma representação XML de um DataSet que contém objetos DataRelation, você provavelmente desejará que as linhas filho de cada relação no XML sejam aninhadas nos seus elementos pai relacionados. Para fazer isso, defina a propriedade Nested da DataRelation como true ao adicionar DataRelation ao DataSet. Para obter mais informações, consulte Nesting DataRelations.

A seguir, há dois exemplos de como gravar a representação XML de um DataSet em um arquivo. O primeiro exemplo passa o nome do arquivo do XML resultante como uma cadeia de caracteres para WriteXml. O segundo exemplo passa um objeto 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();  

Mapeando colunas para elementos XML, atributos e texto

Você pode especificar como uma coluna de uma tabela será representada no XML usando a propriedade ColumnMapping do objeto DataColumn. A tabela a seguir mostra os diferentes valores de MappingType da propriedade ColumnMapping de uma coluna de tabela, e o XML resultante.

Valor de MappingType Descrição
Element Esse é o padrão. A coluna é gravada como um elemento XML, em que ColumnName é o nome do elemento e o conteúdo da coluna é gravado como texto do elemento. Por exemplo:

<ColumnName>Column Contents</ColumnName>
Atributo A coluna é gravada como um atributo XML do elemento XML da linha atual, em que ColumnName é o nome do atributo e o conteúdo da coluna é gravado como valor do atributo. Por exemplo:

<RowElement ColumnName="Column Contents" />
SimpleContent O conteúdo de coluna é gravado como texto no elemento XML da linha atual. Por exemplo:

<RowElement>Column Contents</RowElement>

Observe que SimpleContent não pode ser definido para a coluna de uma tabela que tenha colunas Element ou relações aninhadas.
Oculto A coluna não é gravada na saída XML.

Confira também