Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Inhalt eines ADO.NET-DataSet kann aus einem XML-Stream oder einem XML-Dokument erstellt werden. Außerdem können Sie mit .NET Framework größtenteils festlegen, welche Informationen aus der XML-Quelle geladen werden sollen und wie das Schema oder die relationale Struktur des DataSet erstellt werden soll.
Verwenden Sie zum Ausfüllen von DataSet Daten aus XML die ReadXml Methode des DataSet Objekts. Die ReadXml Methode liest aus einer Datei, einem Datenstrom oder einem XmlReader und verwendet als Argumente die Quelle des XML plus ein optionales XmlReadMode Argument. Weitere Informationen zum XmlReader finden Sie unter Lesen von XML-Daten mit XmlTextReader. Die ReadXml Methode liest den Inhalt des XML-Datenstroms oder Dokuments und lädt die DataSet mit Daten. Abhängig von dem angegebenen XmlReadMode wird auch das relationale Schema des DataSet erstellt, falls noch kein relationales Schema vorhanden ist.
In der folgenden Tabelle werden die Optionen für das XmlReadMode Argument beschrieben.
| Auswahlmöglichkeit | BESCHREIBUNG |
|---|---|
| Automatisch | Dies ist die Standardoption. Prüft die XML-Daten und wählt die am besten geeignete Option in der folgenden Reihenfolge aus: - Wenn der XML-Code ein DiffGram ist, DiffGram wird verwendet.- Wenn das DataSet ein Schema enthält oder das XML ein Inlineschema hat, wird ReadSchema verwendet.- Wenn das DataSet kein Schema enthält und die XML kein Inlineschema hat, wird InferSchema verwendet.Wenn Sie das zu lesende XML-Format kennen, empfiehlt es sich, eine explizite XmlReadMode festzulegen, anstatt die Auto Standardeinstellung zu akzeptieren. |
| ReadSchema | Liest beliebige Inlineschemata und lädt Daten und Schemata. Wenn das DataSet bereits ein Schema enthält, werden neue Tabellen aus dem Inlineschema zum vorhandenen Schema im DataSet hinzugefügt. Wenn bereits Tabellen im Inlineschema des DataSet vorhanden sind, wird eine Ausnahme ausgelöst. Sie können das Schema einer vorhandenen Tabelle nicht mit XmlReadMode.ReadSchema ändern. Wenn das DataSet kein Schema enthält und kein Inlineschema vorhanden ist, werden keine Daten gelesen. Ein Inlineschema kann mit dem XSD-Schema (XML Schema Definition Language) definiert werden. Ausführliche Informationen zum Schreiben eines Inlineschemas als XML-Schema finden Sie unter Ableiten der relationalen DataSet-Struktur vom XML-Schema (XSD). |
| IgnoreSchema | Ignoriert alle Inlineschemata und lädt die Daten in das vorhandene DataSet-Schema. Daten, die nicht mit dem vorhandenen Schema übereinstimmen, werden gelöscht. Wenn kein Schema im DataSet vorhanden ist, werden keine Daten geladen. Wenn es sich bei den Daten um ein DiffGram handelt, IgnoreSchema hat die gleiche Funktionalität wie DiffGram. |
| InferSchema | Ignoriert alle Inlineschemata, leitet das Schema aus der Struktur der XML-Daten ab und lädt anschließend die Daten. Wenn das DataSet bereits ein Schema enthält, wird das aktuelle Schema durch Hinzufügen von Spalten zu den vorhandenen Tabellen erweitert. Wenn keine Tabellen vorhanden sind, werden keine zusätzlichen Tabellen hinzugefügt. Eine Ausnahme wird ausgelöst, wenn bereits eine hergeleitete Tabelle mit einem anderen Namespace vorhanden ist oder wenn hergeleitete Spalten mit vorhandenen Spalten kollidieren. Ausführliche Informationen dazu, wie ReadXmlSchema ein Schema aus einem XML-Dokument abgeleitet wird, finden Sie unter Inferring DataSet Relational Structure from XML. |
| DiffGram | Liest ein DiffGram und fügt die Daten dem aktuellen Schema hinzu.
DiffGram führt neue Zeilen mit vorhandenen Zeilen zusammen, bei denen die eindeutigen Bezeichnerwerte übereinstimmen. Informationen hierzu finden Sie unter "Zusammenführen von Daten aus XML-Dokumenten" am Ende dieses Themas. Weitere Informationen zu DiffGrams finden Sie unter DiffGrams. |
| Fragment- | Setzt den Lesevorgang für mehrere XML-Fragmente fort, bis das Ende des Streams erreicht ist. Fragmente, die mit dem DataSet-Schema übereinstimmen, werden an die entsprechenden Tabellen angehängt. Fragmente, die nicht mit dem DataSet-Schema übereinstimmen, werden gelöscht. |
Hinweis
Wenn Sie ein XmlReader an ReadXml übergeben und dieser Teil eines bereits begonnenen XML-Dokuments ist, wird ReadXml zum nächsten Elementknoten lesen und diesen als das Stammelement behandeln, wobei nur bis zum Ende des Elementknotens gelesen wird. Dies trifft nicht zu, wenn Sie XmlReadMode.Fragment verwenden.
DTD-Entitäten
Wenn Ihr XML Entitäten enthält, die in einem DTD-Schema (Document Type Definition) definiert sind, wird eine Ausnahme ausgelöst, wenn Sie versuchen, einen DataSet Dateinamen, einen Datenstrom oder eine ungültige XmlReader Überprüfung an ReadXml zu laden. Stattdessen müssen Sie einen XmlValidatingReader erstellen, EntityHandling auf EntityHandling.ExpandEntities festlegen und dann Ihren XmlValidatingReader an ReadXml übergeben. Die Entitäten der XmlValidatingReader werden erweitert, bevor sie von der DataSet gelesen werden.
In den folgenden Codebeispielen wird dargestellt, wie ein DataSet aus einem XML-Stream geladen wird. Das erste Beispiel zeigt einen Dateinamen, der an die ReadXml Methode übergeben wird. Im zweiten Beispiel wird eine Zeichenfolge mit XML-Daten mithilfe eines StringReader geladen.
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);
Hinweis
Wenn Sie ReadXml aufrufen, um eine sehr große Datei zu laden, kann es zu langsamer Leistung kommen. Damit ReadXml mit optimaler Effizienz verwendet werden kann, rufen Sie bei einer großen Datei zunächst die BeginLoadData-Methode für jede Tabelle im DataSet auf, und rufen Sie anschließend ReadXml auf. Rufen Sie zum Schluss EndLoadData für jede Tabelle im DataSet auf. Dies wird im folgenden Beispiel dargestellt.
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();
Hinweis
Wenn das XSD-Schema für Ihr DataSet einen targetNamespace enthält, werden die Daten möglicherweise nicht gelesen, und es treten möglicherweise Ausnahmen auf, wenn ReadXml aufgerufen wird, um das DataSet mit XML zu laden, das Elemente ohne qualifizierenden Namespace enthält. Um in diesem Fall nicht qualifizierte Elemente zu lesen, setzen Sie elementFormDefault in Ihrem XSD-Schema auf "qualifiziert". Beispiel:
<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>
Zusammenführen von Daten aus XML-Dokumenten
Wenn das DataSet bereits Daten enthält, werden die neuen Daten aus der XML-Quelle den im DataSet bereits vorhandenen Daten hinzugefügt.
ReadXml übernimmt aus dem XML-Dokument in DataSet keine Zeileninformationen mit übereinstimmenden Primärschlüsseln. Wenn Sie vorhandene Zeileninformationen mit neuen Informationen aus XML überschreiben möchten, verwenden Sie ReadXml, um eine neue DataSet zu erstellen, und fügen Sie dann Merge die neue DataSet in die vorhandene DataSet ein. Beachten Sie, dass das Laden eines DiffGram mit einem ReadXML und einem XmlReadMode von DiffGram Zeilen mit demselben eindeutigen Bezeichner zusammenführt.
Siehe auch
- DataSet.Merge
- Using XML in a DataSet (Verwenden von XML in einem DataSet)
- DiffGrams
- Ableiten einer relationalen DataSet-Struktur aus einem XML-Schema (XSD)
- Ableiten einer relationalen DataSet-Struktur aus einem XML-Schema
- Laden von DataSet-Schemainformationen aus XML
- "DataSets", "DataTables" und "DataViews"
- Übersicht über ADO.NET