Gravando conteúdo do conjunto de dados como dados XML

No ADO.NET você pode escrever uma representação XML de um DataSet, com ou sem seu esquema. Se as informações do esquema forem incluídas em linha com o XML, elas serão escritas usando a 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 restrição.

Quando a DataSet é escrito como dados XML, as linhas no DataSet são escritas em suas versões atuais. No entanto, o DataSet também pode ser escrito como um DiffGram para 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 fornecem grande flexibilidade para como você transporta a representação XML do DataSet. Para obter a representação XML do como uma cadeia de DataSet caracteres, use o método GetXml como mostrado no exemplo a seguir.

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

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

Para gravar um DataSet em um arquivo, fluxo ou XmlWriter, use o método WriteXml . O primeiro parâmetro que você passa 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 deve ser escrita.

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

Opção XmlWriteMode Description
IgnoreSchema Grava o DataSet conteúdo atual dos dados como XML, sem um esquema XML. Esta é a predefinição.
WriteSchema Grava DataSet o conteúdo atual dos dados como XML com a estrutura relacional como esquema XML embutido.
DiffGram Grava todo DataSet como um DiffGram, incluindo valores originais e atuais. Para obter mais informações, consulte DiffGrams.

Ao escrever uma representação XML de um DataSet que contém objetos DataRelation , você provavelmente desejará que o XML resultante tenha as linhas filhas de cada relação aninhadas em seus elementos pai relacionados. Para fazer isso, defina a propriedade Nested do DataRelation como true quando você adicionar o DataRelation ao DataSet. Para obter mais informações, consulte Aninhando DataRelations.

A seguir estão dois exemplos de como gravar a representação XML de um DataSet em um arquivo. O primeiro exemplo passa o nome do arquivo para o 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, atributos e texto XML

Você pode especificar como uma coluna de uma tabela é representada em XML usando a propriedade ColumnMapping do objeto DataColumn . A tabela a seguir mostra os diferentes valores MappingType para a propriedade ColumnMapping de uma coluna de tabela e o XML resultante.

Valor MappingType Description
Elemento Esta é a predefinição. A coluna é escrita como um elemento XML, onde ColumnName é o nome do elemento e o conteúdo da coluna é escrito como o texto do elemento. Por exemplo:

<ColumnName>Column Contents</ColumnName>
Atributo A coluna é escrita como um atributo XML do elemento XML para a linha atual, onde ColumnName é o nome do atributo e o conteúdo da coluna é escrito como o valor do atributo. Por exemplo:

<RowElement ColumnName="Column Contents" />
Conteúdo simples O conteúdo da coluna é escrito como texto no elemento XML para a linha atual. Por exemplo:

<RowElement>Column Contents</RowElement>

Observe que SimpleContent não pode ser definido para uma coluna de uma tabela que tenha colunas Element ou relações aninhadas.
Escondido A coluna não está escrita na saída XML.

Consulte também