Freigeben über


XmlReader-Klasse

Stellt einen Reader dar, der schnellen, nicht zwischengespeicherten Vorwärtszugriff auf XML-Daten bietet.

Namespace: System.Xml
Assembly: System.Xml (in system.xml.dll)

Syntax

'Declaration
Public MustInherit Class XmlReader
    Implements IDisposable
'Usage
Dim instance As XmlReader
public abstract class XmlReader : IDisposable
public ref class XmlReader abstract : IDisposable
public abstract class XmlReader implements IDisposable
public abstract class XmlReader implements IDisposable

Hinweise

XmlReader stellt schreibgeschützten Vorwärtszugriff auf einen Stream von XML-Daten bereit. Die XmlReader-Klasse entspricht den W3C-Empfehlungen für XML 1.0 (Extensible Markup Language) und die Namespaces in XML.

Der aktuelle Knoten verweist auf den Knoten, auf dem der Reader positioniert ist. Der Reader wird durch eine beliebige Lesemethode weitergerückt, und der Wert des aktuellen Knotens wird durch Eigenschaften wiedergegeben.

Wichtig

Zwar enthält Microsoft .NET Framework konkrete Implementierungen der XmlReader-Klasse, z. B. die Klassen XmlTextReader, XmlNodeReader und XmlValidatingReader, doch wird für die Version 2.0 empfohlen, XmlReader-Instanzen mit der Create-Methode zu erstellen. Weitere Informationen finden Sie unter Erstellen von XML-Readern.

XmlReader löst bei XML-Analysefehlern eine XmlException aus. Nachdem eine Ausnahme ausgelöst wurde, ist der Zustand des Reader nicht vorhersehbar. Der angegebene Knotentyp könnte sich z. B. vom tatsächlichen Knotentyp des aktuellen Knotens unterscheiden. Überprüfen Sie mit der ReadState-Eigenschaft, ob sich der Reader im Fehlerzustand befindet.

Nähere Erläuterungen zur XmlReader-Klasse finden Sie unter Lesen von XML mit dem "XmlReader".

Sicherheitsüberlegungen

Beachten Sie beim Arbeiten mit der XmlReader-Klasse folgende Punkte:

  • Vom XmlReader ausgelöste Ausnahmen können Pfadinformationen offen legen, die in der Anwendung nicht weitergegeben werden sollen. Die Anwendungen müssen Ausnahmen abfangen und entsprechend verarbeiten.

  • Aktivieren Sie die DTD-Verarbeitung nur, wenn Sie keine Bedenken hinsichtlich der Gefahr von Denial-of-Service-Angriffen haben oder vertrauenswürdige Quellen verwenden. Die DTD-Verarbeitung ist standardmäßig für von der Create-Methode erstellte XmlReader-Objekte deaktiviert.

    Bei aktivierter DTD-Verarbeitung können Sie mithilfe des XmlSecureResolver die Ressourcen beschränken, auf die der XmlReader zugreifen kann. Sie können die Anwendung auch so entwerfen, dass die XML-Verarbeitung bezüglich Arbeitsspeicher und Zeit eingeschränkt wird. Konfigurieren Sie z. B. Timeoutbeschränkungen in der ASP.NET-Anwendung.

  • XML-Daten können Verweise auf externe Ressourcen, z. B. eine Schemadatei, einschließen. Externe Ressourcen werden standardmäßig mit einem XmlUrlResolver-Objekt ohne Benutzeranmeldeinformationen aufgelöst. Durch die folgenden Aktionen können Sie die Sicherheit weiter erhöhen:

    • Beschränken Sie die Ressourcen, auf die der XmlReader zugreifen kann, indem Sie die XmlReaderSettings.XmlResolver-Eigenschaft auf ein XmlSecureResolver-Objekt festlegen.

    • Lassen Sie nicht zu, dass der XmlReader durch Festlegen der XmlReaderSettings.XmlResolver-Eigenschaft auf NULL (Nothing in Visual Basic) beliebige externe Ressourcen öffnen kann.

  • XML-Daten können eine große Anzahl von Attributen, Namespacedeklarationen, geschachtelten Elementen usw. enthalten, deren Verarbeitung eine gewisse Zeit in Anspruch nehmen kann. Um die Größe der Eingabe zu begrenzen, die an den XmlReader gesendet wird, erstellen Sie eine benutzerdefinierte IStream-Implementierung, die Sie dem XmlReader bereitstellen.

  • Die ReadValueChunk-Methode kann verwendet werden, um große Datenstreams zu behandeln. Mit dieser Methode wird immer nur eine geringe Anzahl von Zeichen gelesen, statt eine einzige Zeichenfolge für den gesamten Wert zu reservieren.

  • Beim Lesen eines XML-Dokuments mit einer großen Anzahl von eindeutigen lokalen Namen, Namespaces oder Präfixen kann ein Problem auftreten. Wenn Sie eine von XmlReader abgeleitete Klasse verwenden und für jedes Element die Eigenschaft LocalName, Prefix oder NamespaceUri aufrufen, wird die zurückgegebene Zeichenfolge einer NameTable hinzugefügt. Die Größe der in der NameTable gespeicherten Auflistung nimmt nie ab, sodass ein virtueller Speicherverlust an Zeichenfolgenhandles eintritt. Eine mögliche Gegenmaßnahme ist, von der NameTable-Klasse abzuleiten und ein Höchstgrößenkontingent zu erzwingen. (Die Verwendung einer NameTable lässt sich nicht umgehen, und der Austausch einer vollen NameTable ist nicht möglich.) Eine weitere Gegenmaßnahme besteht darin, nach Möglichkeit anstelle der genannten Eigenschaften die MoveToAttribute-Methode mit der IsStartElement-Methode zu verwenden. Diese Methoden geben keine Zeichenfolgen zurück und umgehen somit das Problem eines Überlaufs der NameTable-Auflistung.

Vererbungshierarchie

System.Object
  System.Xml.XmlReader
     System.Xml.XmlNodeReader
     System.Xml.XmlTextReader
     System.Xml.XmlValidatingReader

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

XmlReader-Member
System.Xml-Namespace

Weitere Ressourcen

XML-Dokumente und XML-Daten
Sicherheit und System.Xml-Anwendungen