Freigeben über


System.Xml.XmlTextReader-Klasse

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 vorwärtsgerichteten, schreibgeschützten Zugriff auf einen Datenstrom mit XML-Daten. Der aktuelle Knoten bezieht sich auf den Knoten, auf dem der Leser 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 der W3C Extensible Markup Language (XML) 1.0 und den Namespaces in XML-Empfehlungen. XmlTextReader bietet die folgenden Funktionen:

  • Erzwingt die Regeln von wohlgeformten XML.

  • XmlTextReader stellt keine Datenüberprüfung bereit.

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

  • Bei Knoten, bei denen NodeTypeXmlNodeType.EntityReference ist, wird ein einzelner leerer EntityReference Knoten zurückgegeben (d. h. die Value Eigenschaft ist String.Empty).

Hinweis

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

  • Erweitert keine Standardattribute.

Da die XmlTextReader die zusätzlichen Überprüfungen, die für die Validierung von Daten erforderlich sind, nicht durchführt, bietet sie einen schnellen Wohlgeformtheitsparser.

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

Verwenden Sie XmlDocumentzum Lesen von XML-Daten aus einem XmlNodeReader.

XmlTextReader löst XmlException bei XML-Analysefehlern aus. Nachdem eine Ausnahme ausgelöst wurde, ist der Status des Lesers 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 im Fehlerzustand befindet.

Sicherheitsüberlegungen

Im Folgenden sind Dinge aufgeführt, die Sie bei der Verwendung der XmlTextReader Klasse berücksichtigen sollten.

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

  • DTD-Verarbeitung ist standardmäßig aktiviert. Deaktivieren Sie die DTD-Verarbeitung, wenn Sie sich Gedanken über Denial-of-Service-Problematiken machen oder wenn Sie mit nicht vertrauenswürdigen Quellen umgehen haben. Setzen Sie die DtdProcessing Eigenschaft auf Prohibit, um die DTD-Verarbeitung zu deaktivieren.

    Wenn die DTD-Verarbeitung aktiviert ist, können Sie die XmlSecureResolver Ressourcen einschränken, auf die der XmlTextReader Zugriff möglich ist. Sie können Ihre Anwendung auch so entwerfen, dass die XML-Verarbeitung arbeitsspeicher- und zeitschränkt ist. Konfigurieren Sie z. B. die Zeitüberschreitungsparameter in Ihrer ASP.NET-Anwendung.

  • XML-Daten können Verweise auf externe Ressourcen wie eine DTD-Datei enthalten. Standardmäßig werden externe Ressourcen mithilfe eines XmlUrlResolver Objekts ohne Benutzeranmeldeinformationen aufgelöst. Sie können dies weiter sichern, indem Sie eine der folgenden Aktionen ausführen:

  • XML-Daten können eine große Anzahl von Attributen, Namespacedeklarationen, geschachtelten Elementen usw. enthalten, die eine erhebliche Zeit für die Verarbeitung erfordern. Um die Größe der Eingabedaten zu begrenzen, die an XmlTextReader gesendet werden, erstellen Sie eine benutzerdefinierte IStream-Implementierung und stellen Sie diese XmlTextReader zur Verfügung.

  • Die ReadValueChunk Methode kann verwendet werden, um große Datenströme zu verarbeiten. Diese Methode liest eine kleine Anzahl von Zeichen gleichzeitig, anstatt eine einzelne Zeichenfolge für den gesamten Wert zu zuordnen.

  • Standardmäßig werden allgemeine Entitäten nicht erweitert. Allgemeine Entitäten werden erweitert, wenn Sie die ResolveEntity Methode aufrufen.