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 leererEntityReference
-Knoten zurückgegeben (d. h. die Eigenschaft Value istString.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:
Beschränken Sie die Ressourcen, auf die der XmlTextReader zugreifen kann, indem Sie die XmlResolver-Eigenschaft auf ein XmlSecureResolver-Objekt festlegen.
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.