Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Es posible crear el contenido de un DataSet de ADO.NET a partir de una secuencia o de un documento XML. Además, con .NET Framework se dispone de una gran flexibilidad sobre qué información se carga desde XML y cómo se crea el esquema o la estructura relacional del DataSet.
Para rellenar un DataSet objeto con datos de XML, use el ReadXml método del DataSet objeto . El ReadXml método lee de un archivo, una secuencia o xmlReader y toma como argumentos el origen del XML más un argumento opcional XmlReadMode . Para obtener más información sobre XmlReader, vea Lectura de datos XML con XmlTextReader. El método ReadXml lee el contenido de la secuencia o documento XML y lo carga con datos en DataSet. También creará el esquema relacional de DataSet según el XmlReadMode especificado y si ya existe o no un esquema relacional.
En la tabla siguiente se describen las opciones del XmlReadMode argumento .
| Opción | Descripción |
|---|---|
| Automático | Este es el valor predeterminado. Examina el código XML y elige la opción más apropiada, en el orden siguiente: - Si el XML es un DiffGram, DiffGram se usa.- Si DataSet contiene un esquema o el XML contiene un esquema insertado, ReadSchema se usa.- Si DataSet no contiene un esquema y el XML no contiene un esquema insertado, InferSchema se usa.Si conoce el formato del XML que se está leyendo, para obtener el mejor rendimiento, se recomienda establecer un XmlReadMode explícito, en lugar de aceptar el Auto valor predeterminado. |
| ReadSchema | Lee cualquier esquema alineado y carga los datos y el esquema. Si el DataSet ya contiene un esquema, se agregan nuevas tablas del esquema alineado al esquema existente en el DataSet. Si ya existe alguna tabla del esquema alineado en el DataSet, se iniciará una excepción. No podrá modificar el esquema de una tabla existente mediante XmlReadMode.ReadSchema. Si el DataSet no contiene un esquema y no hay ningún esquema alineado, no se leerá ningún dato. Es posible definir el esquema alineado mediante el esquema del lenguaje de definición de esquemas XML (XSD). Para más información sobre cómo escribir un esquema alineado como esquema XML, consulte Derivación de una estructura relacional de un conjunto de datos a partir de un esquema XML (XSD). |
| IgnoreSchema | Pasa por alto cualquier esquema alineado y carga los datos en el esquema del DataSet existente. Se descartan todos los datos que no coincidan con el esquema existente. Si no existe ningún esquema en el DataSet, no se cargará ningún dato. Si los datos son diffGram, IgnoreSchema tiene la misma funcionalidad que DiffGram. |
| InferSchema | Pasa por alto cualquier esquema alineado, deduce el esquema por la estructura de los datos XML y, a continuación, carga los datos. Si el DataSet ya contiene un esquema, se extiende el esquema actual mediante la adición de columnas a las tablas existentes. Si no existen tablas, no se agregarán tablas adicionales. Se iniciará una excepción si ya existe una tabla inferida con un espacio de nombres diferente o si alguna columna inferida entra en conflicto con columnas existentes. Para obtener más información sobre cómo ReadXmlSchema deduce un esquema de un documento XML, consulte Inferencia de la estructura relacional del DataSet a partir de XML. |
| DiffGram | Lee un DiffGram y agrega los datos al esquema actual.
DiffGram combina nuevas filas con filas existentes en las que coinciden los valores de identificador únicos. Vea "Combinar datos desde XML" al final de este tema. Para obtener más información sobre DiffGrams, vea DiffGrams. |
| Fragmento | Sigue leyendo varios fragmentos de XML hasta llegar al final de la secuencia. Los fragmentos que coinciden con el esquema del DataSet se anexan a las tablas apropiadas. Los fragmentos que no coinciden con el esquema del DataSet se descartan. |
Nota
Si pasa un XmlReader a ReadXml que se encuentra en una parte del camino de un documento XML, ReadXml leerá hasta el siguiente nodo de elemento y lo tratará como el elemento raíz, leyendo solamente hasta el final del nodo de elemento. Esto no se aplica si especifica XmlReadMode.Fragment.
Entidades DTD
Si el XML contiene entidades definidas en un esquema de definición de tipo de documento (DTD), se producirá una excepción si intenta cargar un DataSet al pasar un nombre de archivo, flujo o un lector no validante XmlReader a ReadXml. En su lugar, debe crear un XmlValidatingReader y establecer EntityHandling en EntityHandling.ExpandEntities, y pasar su XmlValidatingReader a ReadXml.
XmlValidatingReader expandirá las entidades antes de que las lea el DataSet.
En los siguientes ejemplos de código se muestra cómo cargar un DataSet desde una secuencia XML. En el primer ejemplo se muestra un nombre de archivo que se pasa al método ReadXml. En el segundo ejemplo se muestra una cadena que contiene el código XML que se carga mediante un StringReader.
Dim dataSet As DataSet = New DataSet
dataSet.ReadXml("input.xml", XmlReadMode.ReadSchema)
DataSet dataSet = new DataSet();
dataSet.ReadXml("input.xml", XmlReadMode.ReadSchema);
Dim dataSet As DataSet = New DataSet
Dim dataTable As DataTable = New DataTable("table1")
dataTable.Columns.Add("col1", Type.GetType("System.String"))
dataSet.Tables.Add(dataTable)
Dim xmlData As String = "<XmlDS><table1><col1>Value1</col1></table1><table1><col1>Value2</col1></table1></XmlDS>"
Dim xmlSR As System.IO.StringReader = New System.IO.StringReader(xmlData)
dataSet.ReadXml(xmlSR, XmlReadMode.IgnoreSchema)
DataSet dataSet = new DataSet();
DataTable dataTable = new DataTable("table1");
dataTable.Columns.Add("col1", typeof(string));
dataSet.Tables.Add(dataTable);
string xmlData = "<XmlDS><table1><col1>Value1</col1></table1><table1><col1>Value2</col1></table1></XmlDS>";
System.IO.StringReader xmlSR = new System.IO.StringReader(xmlData);
dataSet.ReadXml(xmlSR, XmlReadMode.IgnoreSchema);
Nota
Si llama ReadXml para cargar un archivo muy grande, es posible que encuentre un rendimiento lento. Para garantizar un rendimiento óptimo de ReadXml (en un archivo de gran tamaño) llame al método BeginLoadData para cada una de las tablas del DataSet y, a continuación, llame a ReadXml. Por último, llame a EndLoadData para cada una de las tablas del DataSet, tal y como se muestra en el siguiente ejemplo.
Dim dataTable As DataTable
For Each dataTable In dataSet.Tables
dataTable.BeginLoadData()
Next
dataSet.ReadXml("file.xml")
For Each dataTable in dataSet.Tables
dataTable.EndLoadData()
Next
foreach (DataTable dataTable in dataSet.Tables)
dataTable.BeginLoadData();
dataSet.ReadXml("file.xml");
foreach (DataTable dataTable in dataSet.Tables)
dataTable.EndLoadData();
Nota
Si el esquema XSD para su DataSet incluye un targetNamespace, es posible que los datos no se lean y se produzcan excepciones al llamar a ReadXml para cargar el DataSet con XML que contenga elementos sin espacio de nombres calificado. Para leer elementos no calificados en este caso, establezca elementFormDefault igual a "calificado" en el esquema XSD. Por ejemplo:
<xsd:schema id="customDataSet"
elementFormDefault="qualified"
targetNamespace="http://www.tempuri.org/customDataSet.xsd"
xmlns="http://www.tempuri.org/customDataSet.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
</xsd:schema>
Combinar datos a partir de XML
Si el DataSet ya contiene datos, los nuevos datos procedentes del código XML se agregarán a los ya presentes en el DataSet.
ReadXml no fusiona desde el XML en el DataSet información de fila con claves principales coincidentes. Para sobrescribir la información de fila existente con nueva información de XML, use ReadXml para crear un nuevo DataSet, y a continuación, Merge el nuevo DataSet en el existente DataSet. Tenga en cuenta que cargar un DiffGram mediante ReadXML con una XmlReadMode de DiffGram combinará filas que tengan el mismo identificador único.
Vea también
- DataSet.Merge
- Usar XML en un conjunto de datos
- Objetos DiffGram
- Derivar una estructura relacional de un conjunto de datos a partir de un esquema XML (XSD)
- Inferir una estructura relacional de un conjunto de datos a partir de XML
- Cargar información del esquema de un conjunto de datos desde XML
- Objetos DataSet, DataTable y DataView
- Información general de ADO.NET