Compartir a través de


Clase System.Xml.XmlTextReader

En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.

Nota:

Se recomienda crear XmlReader instancias mediante el XmlReader.Create método para aprovechar las nuevas funcionalidades.

XmlTextReader proporciona acceso de solo avance y de solo lectura a un flujo de datos XML. El nodo actual hace referencia al nodo en el que se coloca el lector. El lector avanza utilizando cualquiera de los métodos de lectura y las propiedades reflejan el valor del nodo actual.

Esta clase implementa XmlReader y cumple con el Lenguaje de marcado extensible (XML) 1.0 de W3C y los espacios de nombres en recomendaciones XML. XmlTextReader proporciona la siguiente funcionalidad:

  • Aplica las reglas de XML con formato correcto.

  • XmlTextReader no proporciona validación de datos.

  • Comprueba que los nodos DocumentType están bien formados. XmlTextReader comprueba el DTD para que tenga un formato correcto, pero no valida el uso de DTD.

  • Para los nodos donde NodeType es XmlNodeType.EntityReference, se devuelve un único nodo vacío EntityReference (es decir, la propiedad Value es String.Empty).

Nota:

Las declaraciones reales de entidades del DTD se denominan Entity nodos. Al hacer referencia a estos nodos en los datos, se les llama nodos EntityReference.

  • No expande los atributos predeterminados.

Dado que XmlTextReader no realiza las comprobaciones adicionales necesarias para la validación de datos, proporciona un analizador bien formado rápido.

Para realizar la validación de datos, use un validador XmlReader.

Para leer datos XML de un XmlDocument, usa XmlNodeReader.

XmlTextReader lanza una XmlException en caso de errores de análisis XML. Una vez que se produce una excepción, el estado del lector no es predecible. Por ejemplo, el tipo de nodo notificado puede ser diferente del tipo de nodo real del nodo actual. Use la ReadState propiedad para comprobar si un lector está en estado de error.

Consideraciones de seguridad

A continuación se muestran aspectos que se deben tener en cuenta al usar la XmlTextReader clase .

  • Las excepciones producidas por el XmlTextReader pueden revelar información de ruta de acceso que no desea que se propague a la aplicación. Las aplicaciones deben detectar excepciones y procesarlas correctamente.

  • El procesamiento de DTD está habilitado de forma predeterminada. Deshabilite el procesamiento de DTD si le preocupan los problemas de denegación de servicio o si está tratando con orígenes poco fiables. Establezca la DtdProcessing propiedad en Prohibit para deshabilitar el procesamiento de DTD.

    Si tiene habilitado el procesamiento de DTD, puede usar el XmlSecureResolver para restringir recursos a los que XmlTextReader puede acceder. También puede diseñar la aplicación para que el procesamiento XML sea limitado por la memoria y el tiempo. Por ejemplo, configure los límites de tiempo de espera en la aplicación de ASP.NET.

  • Los datos XML pueden incluir referencias a recursos externos, como un archivo DTD. De forma predeterminada, los recursos externos se resuelven mediante un XmlUrlResolver objeto sin credenciales de usuario. Puede proteger esto aún más si realiza una de las siguientes acciones:

  • Los datos XML pueden contener un gran número de atributos, declaraciones de espacio de nombres, elementos anidados, etc. que requieren una cantidad considerable de tiempo para procesarse. Para limitar el tamaño de la entrada que se envía a XmlTextReader, cree una implementación de IStream personalizada y proporcione el XmlTextReader.

  • El ReadValueChunk método se puede usar para controlar grandes flujos de datos. Este método lee un pequeño número de caracteres a la vez en lugar de asignar una sola cadena para todo el valor.

  • De forma predeterminada, las entidades generales no se expanden. Las entidades generales se expanden al llamar al ResolveEntity método .