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.
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:
Wenn Sie die XmlReader-Eigenschaft auf XmlResolver festlegen, kann der null keine externen Ressourcen öffnen.
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.
Zusammenarbeit auf GitHub
Die Quelle für diesen Inhalt finden Sie auf GitHub, wo Sie auch Issues und Pull Requests erstellen und überprüfen können. Weitere Informationen finden Sie in unserem Leitfaden für Mitwirkende.
Feedback zu .NET
.NET ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Erfahren Sie, wie Sie lokale Dateien und Verzeichnisse mithilfe der System.IO Klassen verwalten und wie Sie C#-Objekte mithilfe von CSV-Dateien und den StreamReader- und StreamWriter-Klassen speichern und abrufen.