Freigeben über


Klasse „System.Xml.XmlTextReader“

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

Hinweis

Es wird empfohlen, XmlReader-Instanzen mithilfe der XmlReader.Create-Methode zu erstellen, um neue Funktionen zu nutzen.

XmlTextReader bietet schreibgeschützten Vorwärtszugriff auf einen Stream mit XML-Daten. Der aktuelle Knoten verweist auf den Knoten, auf dem der Reader positioniert ist. Der Reader wird durch eine beliebige Lesemethode an die nächste Position verschoben, und der Wert des aktuellen Knotens wird durch Eigenschaften wiedergegeben.

Diese Klasse implementiert XmlReader und entspricht den W3C-Empfehlungen für XML (Extensible Markup Language), Version 1.0, sowie den Empfehlungen für Namespaces in XML. XmlTextReader bietet die folgenden Funktionen:

  • Erzwingt die Regeln von wohlgeformten XML.

  • XmlTextReader bietet keine Datenüberprüfung.

  • Überprüft, ob DocumentType-Knoten wohlgeformt sind. XmlTextReader überprüft die DTD auf Wohlgeformtheit, überprüft jedoch nicht anhand der DTD.

  • Bei Knoten mit NodeType gleich XmlNodeType.EntityReference wird ein einzelner leerer EntityReference-Knoten zurückgegeben (d. h. die Eigenschaft Value ist String.Empty).

Hinweis

Die tatsächlichen Deklarationen von Entitäten in der DTD werden als Entity-Knoten bezeichnet. Wenn Sie in Ihren Daten auf diese Knoten verweisen, werden sie als EntityReference-Knoten bezeichnet.

  • Standardattribute werden nicht erweitert.

Da XmlTextReader die zusätzlichen Überprüfungen, die für die Datenüberprüfung erforderlich sind, nicht ausführt, wird ein schneller, wohlgeformter Parser bereitgestellt.

Verwenden Sie zum Durchführen der Datenüberprüfung einen XmlReader zum Validieren.

Verwenden Sie XmlNodeReader zum Lesen von XML-Daten aus XmlDocument.

XmlTextReader löst XmlException bei XML-Analysefehlern aus. Nach dem Auslösen einer Ausnahme ist der Status des Readers nicht vorhersehbar. Der gemeldete Knotentyp kann z. B. vom tatsächlichen Knotentyp des aktuellen Knotens abweichen. Verwenden Sie die ReadState-Eigenschaft, um zu überprüfen, ob sich ein Reader in einem fehlerhaften Zustand befindet.

Sicherheitshinweise

Bei der Verwendung der XmlTextReader-Klasse sollten Sie die folgenden Punkte berücksichtigen:

  • Ausnahmen, die von XmlTextReader ausgelöst werden, können Pfadinformationen offenlegen, die Sie nicht an die Anwendung weitergeben möchten. Die Anwendungen müssen diese Ausnahmen abfangen und entsprechend verarbeiten.

  • Die DTD-Verarbeitung ist in der Standardeinstellung aktiviert. Deaktivieren Sie die DTD-Verarbeitung, wenn Sie DoS-Probleme befürchten oder wenn Sie mit nicht vertrauenswürdigen Quellen arbeiten. Legen Sie die DtdProcessing-Eigenschaft auf Prohibit fest, um die DTD-Verarbeitung zu deaktivieren.

    Wenn die DTD-Verarbeitung aktiviert ist, können die Ressourcen, auf die der XmlSecureResolver Zugriff hat, mit dem XmlTextReader eingeschränkt werden. Sie können die Anwendung auch so entwerfen, dass die XML-Verarbeitung bezüglich Arbeitsspeicher und Zeit eingeschränkt wird. In einer ASP.NET-Anwendung können z. B. Timeouts konfiguriert werden.

  • XML-Daten können Verweise auf externe Ressourcen (z. B. eine DTD-Datei) enthalten. Standardmäßig werden externe Ressourcen mithilfe eines XmlUrlResolver-Objekts ohne Anmeldeinformationen eines Benutzers aufgelöst. Durch die folgenden Aktionen können Sie die Sicherheit weiter erhöhen:

  • XML-Daten können eine Vielzahl von Attributen, Namespacedeklarationen, geschachtelten Elementen usw. enthalten, deren Verarbeitung sehr zeitaufwendig ist. Wenn Sie die Größe der an XmlTextReader gesendeten Eingabe beschränken möchten, erstellen Sie eine benutzerdefinierte IStream-Implementierung, und übergeben Sie sie an XmlTextReader.

  • Die ReadValueChunk-Methode kann verwendet werden, um große Datenströme zu verarbeiten. Mit dieser Methode wird jeweils eine kleine Anzahl von Zeichen gelesen, anstatt dem ganzen Wert eine einzelne Zeichenfolge zuzuweisen.

  • Allgemeine Entitäten werden standardmäßig nicht erweitert. Allgemeine Entitäten werden beim Aufrufen der ResolveEntity-Methode erweitert.