XmlTextReader proporciona acceso de sólo lectura y con desplazamiento sólo hacia delante a una secuencia de datos XML. El nodo actual hace referencia al nodo en el que está situado el lector. Para avanzar el lector, utilice cualquiera de los métodos de lectura y las propiedades reflejan el valor del nodo actual.
Esta clase implementa XmlReader y satisface las recomendaciones relativas a espacios de nombres en XML y Extensible Markup Language (XML) 1.0 del Consorcio W3C. XmlTextReader proporciona la siguiente funcionalidad:
-
Impone las reglas de formato XML correcto.
-
XmlTextReader no proporciona validación de datos.
-
Comprueba que los nodos DocumentType tienen el formato correcto. XmlTextReader comprueba si DTD tiene el formato correcto, pero no valida utilizando DTD.
-
Para los nodos en los que la propiedad NodeType es XmlNodeType.EntityReference, se devuelve un solo nodo EntityReference vacío (es decir, la propiedad Value es String.Empty).
Nota: |
|---|
| Las declaraciones reales de entidades en DTD se denominan nodos Entity. Al hacer referencia a estos nodos en los datos, se denominan nodos EntityReference. |
Como XmlTextReader no realiza las comprobaciones adicionales necesarias para la validación de datos, proporciona un analizador rápido de formatos correctos.
Para realizar la validación de los datos, utilice un objeto XmlReader de validación. Para obtener más información, vea Validación de datos XML con XmlReader.
Para leer datos XML de un objeto XmlDocument, utilice XmlNodeReader.
XmlTextReader produce una excepción XmlException en los errores de análisis de XML. Tras producirse una excepción, el estado del lector es imprevisible. Por ejemplo, el tipo de nodo notificado puede ser distinto del tipo de nodo real del nodo actual. Utilice la propiedad ReadState para comprobar si un lector está en estado de error.
Para obtener más información sobre las clases XmlReader, vea Leer fragmentos de XML con XmlReader.
Consideraciones de seguridad
Debe tener en cuenta lo siguiente cuando utilice la clase XmlTextReader.
-
Las excepciones iniciadas por XmlTextReader pueden revelar información de ruta de acceso que quizás no desee traspasar a la aplicación. Las aplicaciones deben detectar las 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 en los que no confía. Establezca la propiedad ProhibitDtd en true para deshabilitar el procesamiento de DTD.
Si tiene el procesamiento de DTD habilitado, puede utilizar XmlSecureResolver para restringir los recursos a los que XmlTextReader puede tener acceso. También puede diseñar su aplicación para que el procesamiento XML se realice con restricciones de memoria y tiempo. Por ejemplo, puede configurar límites del tiempo de espera en su aplicación ASP.NET
-
Los datos XML pueden incluir referencias a recursos externos como un archivo DTD. De manera predeterminada, los recursos externos se resuelven utilizando un objeto XmlUrlResolver sin credenciales de usuario. Puede protegerse aún más si realiza una de las acciones siguientes:
-
Restrinja los recursos a los que puede tener acceso XmlTextReader estableciendo la propiedad XmlResolver en un objeto XmlSecureResolver.
-
No permita que XmlReader abra ningún recurso externo estableciendo la propiedad XmlResolver en referencia null (Nothing en Visual Basic).
-
Los datos XML pueden contener un gran número de atributos, declaraciones de espacios de nombres, elementos anidados, etc. que requieren mucho tiempo para su procesamiento. Para limitar el tamaño de la entrada que se envía a XmlTextReader, cree una implementación personalizada de IStream y proporciónele el XmlTextReader.
-
El método ReadValueChunk puede utilizarse para tratar secuencias grandes de datos. Este método lee un número reducido de caracteres cada vez en lugar de asignar una única cadena para todo el valor.
-
De forma predeterminada, las entidades generales no se expanden. Las entidades generales se expanden cuando llama al método ResolveEntity.
Notas para los herederos:
Esta clase tiene una petición de herencia. Es necesaria la confianza total para derivar de
XmlTextReader. Para obtener más información, vea
Peticiones de herencia.