Escribir el contenido de un conjunto de datos como datos XML

En ADO.NET es posible escribir una representación XML de un DataSet, con o sin su esquema. Si la información de esquema está incluida alineada con el código XML, se escribirá con el lenguaje de definición de esquemas XML (XSD). El esquema contiene las definiciones de tabla del DataSet, así como las definiciones de relaciones y restricciones.

Cuando un DataSet se escribe como datos XML, las filas del DataSet se escriben en sus versiones actuales. Sin embargo, el DataSet también se puede escribir como un DiffGram, de forma que se incluyan los valores actuales y originales de las filas.

La representación XML del DataSet se puede escribir en un archivo, una secuencia, un XmlWriter o una cadena. Estas opciones ofrecen una gran flexibilidad en cuanto a la forma de transportar la representación XML del DataSet. Para obtener la representación XML del DataSet como una cadena, utilice el método GetXml, como se muestra en el ejemplo siguiente.

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

GetXml devuelve la representación XML del DataSet sin información de esquema. Para escribir la información de esquema del DataSet (como esquema XML) en una cadena, utilice GetXmlSchema.

Para escribir un DataSet en un archivo, una secuencia o XmlWriter, utilice el método WriteXml. El primer parámetro que se pasa a WriteXml es el destino del resultado XML. Por ejemplo, pasar una cadena que contiene un nombre de archivo, un objeto System.IO.TextWriter, etc. Puede pasar un segundo parámetro opcional de un XmlWriteMode para especificar cómo se va a escribir el resultado XML.

En la siguiente tabla se muestran las opciones de XmlWriteMode.

Opción XmlWriteMode Descripción
IgnoreSchema Escribe el contenido actual del DataSet como datos XML, sin un esquema XML. Este es el valor predeterminado.
WriteSchema Escribe el contenido actual del DataSet como datos XML con la estructura relacional como un esquema XML alineado.
DiffGram Escribe el DataSet completo como un DiffGram, incluidos los valores originales y actuales. Para obtener más información, DiffGrams.

Al escribir una representación XML de un DataSet que contiene objetos DataRelation, lo más probable es que desee que el código XML resultante tenga las filas secundarias de cada relación anidadas dentro de sus elementos primarios relacionados. Para ellos establezca la propiedad anidada de la DataRelation en true cuando agregue la DataRelation al DataSet. Para más información, consulte Anidar objetos DataRelations.

A continuación se muestran dos ejemplos de cómo escribir la representación XML de un DataSet en un archivo. En el primer ejemplo, el nombre de archivo del código XML resultante se pasa como una cadena a WriteXml. En el segundo ejemplo se pasa un 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();  

Asignar columnas a elementos, atributos y texto XML

Se puede especificar cómo se representará en XML una columna de una tabla si se utiliza la propiedad ColumnMapping del objeto DataColumn. En la siguiente tabla se muestran los distintos valores de MappingType para la propiedad ColumnMapping de una columna de tabla y el código XML resultante.

Valor MappingType Descripción
Element Este es el valor predeterminado. La columna se escribe como un elemento XML, donde ColumnName es el nombre del elemento y el contenido de la columna se escribe como el texto del elemento. Por ejemplo:

<ColumnName>Column Contents</ColumnName>
Atributo La columna se escribe como un atributo XML del elemento XML para la fila actual, donde ColumnName es el nombre del atributo y el contenido de la columna se escribe como el valor del atributo. Por ejemplo:

<RowElement ColumnName="Column Contents" />
SimpleContent El contenido de la columna se escribe como texto en el elemento XML de la fila actual. Por ejemplo:

<RowElement>Column Contents</RowElement>

Hay que tener en cuenta que SimpleContent no se puede establecer para una columna de una tabla que tenga columnas Element o relaciones anidadas.
Oculto La columna no se escribe en el resultado XML.

Vea también