(0) exportieren Drucken
Alle erweitern

Lesen von XML mit dem "XmlReader"

.NET Framework 1.1

Die XmlReader-Klasse ist eine abstrakte Basisklasse, die nicht zwischengespeicherten, schreibgeschützten Vorwärtszugriff bietet. Die XmlReader-Klasse stellt sicher, dass der XML-Code wohlgeformt ist, und löst XmlExceptions-Ausnahmen aus, falls Fehler auftreten. Diese Klasse kann einen Datenstrom oder ein Dokument lesen und implementiert die Namespacevoraussetzungen, die in der W3C-Empfehlung unter www.w3.org/TR/REC-xml-names beschrieben werden.

Da XmlReader eine abstrakte Basisklasse ist, können Sie einen eigenen, benutzerdefinierten Reader erstellen oder die aktuellen Implementierungen der XmlTextReader-, der XmlValidatingReader- und der XmlNodeReader-Klasse erweitern. Von .NET Framework, Version 1.1, implementierte Sicherheitsbeschränkungen des XmlReader lassen allerdings nur eine begrenzte Vererbarkeit von XmlTextReader und XmlValidatingReader zu. In .NET Framework, Version 1.0, kann dagegen jede Komponente von XmlTextReader oder XmlValidatingReader erben. Durch die Implementierung einer Vererbungsforderung für den Konstruktor von XmlTextReader und XmlValidatingReader in .NET Framework, Version 1.1, können jetzt nur noch vertrauenswürdige Komponenten von XmlTextReader und XmlValidatingReader erben.

Die XmlReader-Klasse definiert Methoden, mit denen Sie Daten durch einen Pull aus XML-Code abrufen oder nicht gewünschte Datensätze überspringen können. XmlReader unterscheidet sich vom SAX-Modell, das ein Pushmodell ist, bei dem der Parser Ereignisse durch einen Push in die Anwendung übergibt. Eine Gegenüberstellung von XmlReader und SAX-Modell finden Sie unter Vergleichen von "XmlReader" und SAX-Reader.

Die XmlReader-Klasse verfügt über Methoden für folgende Aufgaben:

  • Lesen von XML-Inhalt, wenn der Inhalt vollständig verfügbar ist, z. B. eine XML-Textdatei.
  • Ermitteln der Tiefe des XML-Elementstapels.
  • Feststellen, ob ein Element einen Inhalt hat oder leer ist.
  • Lesen von Attributen und Navigieren in Attributen.
  • Überspringen von Elementen und deren Inhalt.

Die XmlReader-Klasse weist außerdem Eigenschaften auf, die Informationen zurückgeben, z. B.:

  • Typ und Name des aktuellen Knotens.
  • Inhalt des aktuellen Knotens

Implementierungen der XmlReader-Klasse erweitern die Basisklasse und unterscheiden sich voneinander hinsichtlich ihres Entwurfs, so dass sie verschiedene Anforderungen erfüllen. In der folgenden Tabelle werden die Implementierungen der XmlReader-Klasse beschrieben.

Klasse Beschreibung
XmlTextReader-Klasse Liest Zeichenströme. Diese Klasse ist ein Vorwärtsreader, dessen Methoden Informationen über Inhalt und Knotentypen zurückgeben. DTDs (Document Type Definitions) oder Schemas werden nicht unterstützt.
XmlNodeReader-Klasse Stellt einen Parser über eine XML-DOM (Dokumentobjektmodell)-API bereit, wie die XmlNode-Struktur. Liest einen XmlNode ein und gibt die Knoten zurück, die in der DOM-Struktur gefunden werden, einschließlich Entitätsverweisknoten. DTD- oder Schemaüberprüfung werden nicht unterstützt, die Klasse kann jedoch in der DTD definierte Entitäten auflösen.
XmlValidatingReader-Klasse Bietet einen voll kompatiblen XML-Parser mit oder ohne Überprüfung, der DTDs, XSD (XML Schema Definition Language)-Schemas oder XDR (XML-Data Reduced)-Schemas unterstützt. Verwendet einen XmlTextReader und schichtet Gültigkeitsüberprüfungen nach ganz oben.
Erstellen eines benutzerdefinierten XML-Readers Ermöglicht vom Entwickler definierten Ableitungen des XmlReaders.
Hinweis   Der XmlTextReader und der XmlValidatingReader sind hinsichtlich der Größe der Dateien, die sie lesen können, beschränkt. Dateien, die größer als 2 GB sind, können nicht gelesen werden. Teilen Sie die Quelldatei nach Möglichkeit in mehrere kleinere Dateien auf.

Der XsltReader ist eine weitere Implementierung, die keinen öffentlichen Konstruktor aufweist. Er wird durch Aufrufen der Transform-Methode in der XslTransform-Klasse erstellt. Der XsltReader bietet folgende Funktionen:

  • Implementiert die Regeln, nach denen XML wohlgeformt sein muss.
  • Führt keine Überprüfung gegen DTDs oder Schemas durch.
  • Erweitert Standardattribute nicht, da DTD-Daten (DOCTYPE-Knoten) nicht im XPath-Datenmodell offen gelegt werden. Weitere Informationen hierzu finden Sie unter XmlReader.IsDefault-Eigenschaft. Wenn Standardattribute im Quelldokument erweitert werden müssen, bevor eine Transformation durchgeführt wird, muss der Datenspeicher (z. B. XmlDocument) durch einen XmlValidatingReader geladen werden.

Jede der Klassen XmlTextReader, XmlValidatingReader und XmlNodeReader unterstützt unterschiedliche Szenarios. In der folgenden Tabelle wird erklärt, welcher Reader für welches Szenario zu verwenden ist, und welchen Wert die ValidationType-Eigenschaft haben muss.

Szenario Zu verwendender Reader ValidationType-Eigenschaft
Verbesserte Leistung ist erforderlich, DTDs oder Schemas müssen nicht unterstützt werden. XmlTextReader Nicht verfügbar.
Der XML-Code muss wohlgeformt sein und externe Entitäten und DocTypes mit zugehöriger DTD enthalten. XmlTextReader Nicht verfügbar.
Der XML-Code muss gültig und wohlgeformt gemäß der DTD sein. XmlValidatingReader Auto oder DTD.
Der XML-Code muss wohlgeformt sein und gegen ein Schema überprüft werden. XmlValidatingReader Auto, wenn keine DTD oder kein XDR-Schema verfügbar ist.
Der XML-Code muss beim Streamen von XML-Daten aus einem XmlNode wohlgeformt sein. XmlNodeReader Nicht verfügbar.

Die folgende Tabelle zeigt, wie die XmlResolver- und die XmlTextReader.Normalization-Eigenschaft in den verschiedenen Readern gesetzt werden kann, so dass die Anforderungen in den einzelnen Szenarios erfüllt werden.

Wenn die Normalization-Eigenschaft auf den Wert true festgelegt ist, werden die Zeilenendzeichen in Text- und Leerraumknoten sowie die Attributwerte entsprechend ihrem Typ normalisiert. Wenn die Normalization-Eigenschaft also auf true gesetzt wird, ergibt sich eine langsamere Ausführung, als wenn sie auf den (Standard-) Wert false gesetzt wird. Weitere Informationen hierzu finden Sie unter XmlTextReader.Normalization-Eigenschaft.

Die XmlResolver-Eigenschaft wird zum Auflösen externer, über einen URI angegebener Ressourcen (z. B. externe DTDs) oder zum Finden eines Schemas verwendet. Weitere Informationen über die Verwendung der XmlResolver-Eigenschaft mit den verschiedenen Readern finden Sie unter Auflösen von Ressourcen mit dem XmlResolver.

Szenario XmlResolver Normalization-Eigenschaft
Verbesserte Leistung ist erforderlich, DTDs oder Schemas müssen nicht unterstützt werden. Auf Null-Verweis gesetzt. Weitere Informationen hierzu finden Sie unter XmlTextReader.XmlResolver-Eigenschaft. Auf false gesetzt.
Das Dokument muss wohlgeformt sein und externe Entitäten und DocTypes mit zugehöriger DTD enthalten. Auf Nicht-Null-Verweis gesetzt. Alle externen Entitäten müssen auflösbar sein. Weitere Informationen hierzu finden Sie unter XmlTextReader.XmlResolver-Eigenschaft. Auf true gesetzt.
Das Dokument muss wohlgeformt sein, und der XML-Code muss gültig gemäß der DTD sein. Auf Nicht-Null-Verweis gesetzt. Alle externen Entitäten müssen auflösbar sein. Weitere Informationen hierzu finden Sie unter XmlValidatingReader.XmlResolver-Eigenschaft. Für XmlTextReader auf true gesetzt, bevor sie an XmlValidatingReader übergeben wird.
Das Dokument muss wohlgeformt sein und gegen ein Schema überprüft werden. Auf Nicht-Null-Verweis gesetzt. Alle externen Entitäten müssen auflösbar sein. Weitere Informationen hierzu finden Sie unter XmlValidatingReader.XmlResolver-Eigenschaft. Für XmlTextReader auf true gesetzt, bevor sie an XmlValidatingReader übergeben wird.
Das Dokument muss beim Streamen von XML-Daten aus einem XmlNode wohlgeformt sein. Nicht verfügbar. Nicht verfügbar.

Der XmlValidatingReader bietet Überprüfungsdienste über einen XmlTextReader. Weitere Informationen hierzu finden Sie unter XML-Gültigkeitsprüfung mit "XmlValidatingReader".

Siehe auch

Aktuelle Knotenposition in "XmlReader" | Eigenschafteneinstellungen für "XmlReader" | Objektvergleich mit "XmlNameTable" in "XmlReader" | Lesen von Attributen mit "XmlReader" | Lesen von Element- und Attributinhalten | Überspringen von Inhalten mit "XmlReader" | Lesen und Erweitern von "EntityReference" | Vergleichen von "XmlReader" und SAX-Reader | Lesen von XML-Daten mit "XmlTextReader" | Lesen von Strukturknoten mit dem "XmlNodeReader" | Überprüfen von XML mit "XmlValidatingReader" | Erstellen eines benutzerdefinierten XML-Readers | XmlReader-Klasse | XmlReader-Member | XmlNodeReader-Klasse | XmlNodeReader-Member | XmlTextReader-Klasse | XmlTextReader-Member | XmlValidatingReader-Klasse | XmlValidatingReader-Member

Anzeigen:
© 2014 Microsoft