Compartilhar via


Gravando conteúdo do conjunto de dados como dados XML

Em ADO.NET você pode escrever uma representação XML de um DataSet, com ou sem seu esquema. Se as informações de esquema estiverem incluídas embutidas com o XML, elas serão gravadas usando a linguagem de definição de esquema XML (XSD). O esquema contém as definições de tabela de DataSet, assim 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, também DataSet 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 oferecem grande flexibilidade para a forma como você transporta a representação XML do DataSet. Para obter a representação XML de DataSet como uma string, use o método GetXml, conforme mostrado no exemplo a seguir.

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

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

Para gravar um DataSet arquivo, fluxo ou XmlWriter, use o WriteXml método. 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 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 o 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 DataRelation objetos, é provável que deseje que o XML resultante tenha as linhas filhas de cada relação aninhadas dentro de seus elementos pai correspondentes. Para fazer isso, defina a Nested propriedade do DataRelation para true ao adicionar o DataRelation ao DataSet. Para obter mais informações, consulte Nesting DataRelations.

Veja a seguir 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 XML, atributos e texto

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

Valor de MappingType Descrição
Elemento Esse é o padrão. A coluna é escrita como um elemento XML em que o ColumnName é o nome do elemento e o conteúdo da coluna é gravado 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 é gravado como o valor do atributo. Por exemplo:

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

<RowElement>Column Contents</RowElement>

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

Consulte também