Compartir a través de


Cargar la información de esquema de DataSet desde XML

El esquema de un DataSet (sus tablas, columnas, relaciones y restricciones) se puede definir mediante programación, crear mediante los métodos Fill o FillSchema de un DataAdapter, o cargar desde un documento XML. Para cargar información de esquema de un DataSet desde un documento XML puede utilizar el método ReadXmlSchema o InferXmlSchema del DataSet. ReadXmlSchema permite cargar o deducir la información de esquema de un DataSet desde el documento que contiene el esquema de lenguaje de definición de esquema XML (XSD) o desde un documento XML con un esquema XML en línea. InferXmlSchema le permite deducir el esquema a partir del documento XML y pasar por alto ciertos espacios de nombres XML que especifique.

ReadXmlSchema

Para cargar el esquema de un DataSet desde un documento XML sin cargar ningún dato, puede utilizar el método ReadXmlSchema del DataSet. ReadXmlSchema crea el esquema del DataSet definido mediante el esquema del lenguaje de definición de esquemas XML (XSD).

El método ReadXmlSchema toma un único argumento, que puede ser un nombre de archivo, una secuencia o un XmlReader que contiene el documento XML que se va a cargar. El documento XML puede contener únicamente el esquema o puede contener el esquema en línea con elementos XML que contienen datos. Para obtener más detalles sobre cómo escribir un esquema en línea como un esquema XML, vea Generar la estructura relacional de DataSet desde la definición de esquema XML (XSD).

Si el documento XML pasado a ReadXmlSchema no contiene información de esquema en línea, ReadXmlSchema deducirá el esquema a partir de los elementos del documento XML. Si el DataSet ya contiene un esquema, se agregarán nuevas columnas a tablas existentes y se agregarán tablas nuevas si no existen para extender el esquema actual. Si una columna que se va a agregar ya existe en el DataSet pero tiene un tipo incompatible con la columna encontrada en el código XML, se iniciará una excepción. Para obtener más detalles sobre cómo ReadXmlSchema deduce un esquema a partir de un documento XML, vea Deducir la estructura relacional de DataSet de XML.

Mientras que ReadXmlSchema carga o deduce únicamente el esquema de un DataSet, el método ReadXml del DataSet carga o deduce el esquema y los datos contenidos en el documento XML. Para obtener más información, vea Cargar DataSet desde XML.

En los siguientes ejemplos de código se muestra cómo cargar el esquema de un DataSet desde un documento o una secuencia XML. En el primer ejemplo se muestra cómo se pasa un nombre de archivo de esquema XML al método ReadXmlSchema. En el segundo ejemplo se muestra un objeto System.IO.StreamReader.

Dim myDS As DataSet = New DataSet
myDS.ReadXmlSchema("schema.xsd")
[C#]
DataSet myDS = new DataSet();
myDS.ReadXmlSchema("schema.xsd");
[Visual Basic]
Dim xmlStream As System.IO.StreamReader = New System.IO.StreamReader ("schema.xsd");
Dim myDS As DataSet = New DataSet
myDS.ReadXmlSchema(xmlStream)
xmlStream.Close()
[C#]
System.IO.StreamReader xmlStream = new System.IO.StreamReader("schema.xsd");
DataSet myDS = new DataSet();
myDS.ReadXmlSchema(xmlStream);
xmlStream.Close();

InferXmlSchema

También puede indicar al DataSet que deduzca su esquema a partir de un documento XML mediante el método InferXmlSchema del DataSet. InferXmlSchema funciona del mismo modo que ReadXml con un XmlReadMode de InferSchema (carga datos y deduce el esquema) y ReadXmlSchema si el documento que se lee no contiene ningún esquema en línea. Sin embargo, InferXmlSchema ofrece la posibilidad adicional de especificar que se pasen por alto determinados espacios de nombres XML cuando se deduzca el esquema. InferXmlSchema toma dos argumentos necesarios: la ubicación del documento XML (especificada por un nombre de archivo, una secuencia o un XmlReader) y una matriz de cadena de espacios de nombres XML que la operación debe pasar por alto.

Por ejemplo, tomemos el siguiente código XML:

<NewDataSet xmlns:od="urn:schemas-microsoft-com:officedata">
<Categories>
  <CategoryID od:adotype="3">1</CategoryID> 
  <CategoryName od:maxLength="15" od:adotype="130">Beverages</CategoryName> 
  <Description od:adotype="203">Soft drinks and teas</Description> 
</Categories>
<Products>
  <ProductID od:adotype="20">1</ProductID> 
  <ReorderLevel od:adotype="3">10</ReorderLevel> 
  <Discontinued od:adotype="11">0</Discontinued> 
</Products>
</NewDataSet>

Debido a los atributos especificados para los elementos en el documento XML anterior, el método ReadXmlSchema, así como el método ReadXml con un XmlReadMode de InferSchema, crearían tablas para cada elemento del documento: Categories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel y Discontinued. Para obtener más información, vea Deducir la estructura relacional de DataSet de XML. Sin embargo, una estructura más adecuada sería crear únicamente las tablas Categories y Products y, después, crear las columnas CategoryID, CategoryName y Description en la tabla Categories, y las columnas ProductID, ReorderLevel y Discontinued en la tabla Products. Para asegurarse de que el esquema inferido pasa por alto los atributos especificados en los elementos XML, utilice el método InferXmlSchema y especifique que se debe pasar por alto el espacio de nombres XML para officedata, como se muestra en el siguiente ejemplo.

Dim myDS As DataSet = New DataSet
myDS.InferXmlSchema("input_od.xml", New String[] {"urn:schemas-microsoft-com:officedata"})
[C#]
DataSet myDS = new DataSet();
myDS.InferXmlSchema("input_od.xml", new string[] "urn:schemas-microsoft-com:officedata");

Vea también

XML y DataSet | Generar la estructura relacional de DataSet desde la definición de esquema XML (XSD) | Deducir la estructura relacional de DataSet de XML | Cargar DataSet desde XML | Crear y utilizar DataSets