Freigeben über


Laden von DataSet-Schemainformationen aus XML

Das Schema eines DataSets (seine Tabellen, Spalten, Beziehungen und Einschränkungen) kann programmgesteuert definiert, von den Methoden Fill oder FillSchema eines DataAdapters erstellt oder aus einem XML-Dokument geladen werden. Zum Laden von DataSet-Schemainformationen aus einem XML-Dokument können Sie entweder die ReadXmlSchema-Methode oder die InferXmlSchema-Methode des DataSets verwenden. Mit ReadXmlSchema können Sie DataSet-Schemainformationen aus dem Dokument mit dem XML Schema Definition (XSD)-Sprachschema oder aus einem XML-Dokument mit einem Inline-XML-Schema laden oder herleiten. InferXmlSchema ermöglicht Ihnen die Herleitung des Schemas aus dem XML-Dokument, während bestimmte, von Ihnen angegebene XML-Namespaces ignoriert werden.

ReadXmlSchema

Sie können die ReadXmlSchema-Methode des DataSets verwenden, um das Schema eines DataSets ohne Daten aus einem XML-Dokument zu laden. ReadXmlSchema erstellt ein DataSet-Schema, das mit dem XML Schema Definition (XSD)-Sprachschema definiert wird.

Die ReadXmlSchema-Methode verwendet ein einzelnes Argument eines Dateinamens, eines Streams oder eines XmlReaders mit dem zu ladenden XML-Dokument. Das XML-Dokument kann nur ein Schema enthalten; es kann aber auch ein Inline-Schema mit XML-Elementen besitzen, die über Daten verfügen. Einzelheiten über das Schreiben eines Inline-Schemas als XML-Schema finden Sie unter Generieren einer relationalen DataSet-Struktur aus einem XML-Schema (XSD).

Wenn das an ReadXmlSchema übergebene XML-Dokument keine Inline-Schemainformationen enthält, leitet ReadXmlSchema das Schema von den Elementen im XML-Dokument ab. Wenn das DataSet bereits ein Schema enthält, wird das aktuelle Schema erweitert, indem neue Spalten in bestehende Tabellen eingefügt und neue Tabellen hinzugefügt werden, sofern sie noch nicht vorhanden sind. Wenn eine hinzugefügte Spalte bereits im DataSet vorhanden ist, deren Typ aber nicht mit der im XML-Dokument gefundenen Spalte kompatibel ist, wird eine Ausnahme ausgelöst. Einzelheiten darüber, wie ReadXmlSchema ein Schema von einem XML-Dokument herleitet, finden Sie unter Herleiten der relationalen DataSet-Struktur aus XML.

Während ReadXmlSchema lediglich das Schema eines DataSets lädt oder herleitet, werden mit der ReadXml-Methode des DataSets sowohl das Schema als auch die im XML-Dokument enthaltenen Daten geladen oder hergeleitet. Weitere Informationen hierzu finden Sie unter Laden eines DataSets aus XML.

Die folgenden Codebeispiele veranschaulichen, wie ein DataSet-Schema aus einem XML-Dokument oder -Stream geladen wird. Das erste Beispiel zeigt, wie der Dateiname eines XML-Schemas an die ReadXmlSchema-Methode übergeben wird. Das zweite Beispiel zeigt einen 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

Sie können das DataSet auch anweisen, sein Schema mit der InferXmlSchema-Methode des DataSets aus einem XML-Dokument abzuleiten. InferXmlSchema funktioniert wie ReadXml zusammen mit einem auf InferSchema festgelegten XmlReadMode (lädt Daten und leitet das Schema ab) und ReadXmlSchema, wenn das gelesene Dokument kein Inline-Schema enthält. Allerdings haben Sie mit InferXmlSchema zusätzlich die Möglichkeit, bestimmte XML-Namespaces anzugeben, die beim Herleiten des Schemas ignoriert werden sollen. InferXmlSchema verwendet zwei erforderliche Argumente: den Speicherort des XML-Dokuments, das durch einen Dateinamen, einen Stream oder einen XmlReader angegeben wird, und ein Zeichenfolgenarray aus XML-Namespaces, die bei der Operation ignoriert werden sollen.

Betrachten Sie z. B. folgenden XML-Code:

<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>

Aufgrund der Attribute, die für die Elemente im vorhergehenden XML-Dokument angegeben wurden, würden die ReadXmlSchema-Methode und die ReadXml-Methode – mit einem auf InferSchema festgelegten XmlReadMode – für jedes Element im Dokument Tabellen erstellen: Categories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel und Discontinued. Weitere Informationen hierzu finden Sie unter Herleiten der relationalen DataSet-Struktur aus XML. Es wäre allerdings besser, zunächst nur die Tabellen Categories und Products und dann die Spalten CategoryID, CategoryName und Description in der Categories-Tabelle sowie die Spalten ProductID, ReorderLevel und Discontinued in der Products-Tabelle zu erstellen. Damit sichergestellt wird, dass das hergeleitete Schema die in den XML-Elementen angegebenen Attribute ignoriert, geben Sie mit der InferXmlSchema-Methode an, dass der XML-Namespace für officedata ignoriert werden soll (siehe folgendes Beispiel).

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");

Siehe auch

XML und das DataSet | Generieren einer relationalen DataSet-Struktur aus einem XML-Schema (XSD) | Herleiten der relationalen DataSet-Struktur aus XML | Laden eines DataSets aus XML | Erstellen und Verwenden von DataSets