Leer fragmentos de XML con XmlReader

XmlReader es una clase base abstracta que proporciona acceso de sólo avance y de sólo lectura sin almacenamiento en caché. La clase comprueba que el código XML tenga un formato correcto e inicia una excepción XmlExceptions si se encuentra un error. Puede leer una secuencia o un documento, e implementa los requisitos de los espacios de nombres descritos en la recomendación proporcionada por el W3C (World Wide Web Consortium) org/TR/REC-xml-names.

Al ser una clase base abstracta, permite al usuario personalizar su propio tipo de sistema de lectura o extender las implementaciones actuales de las clases XmlTextReader, XmlValidatingReader y XmlNodeReader. Sin embargo, las restricciones de seguridad implementadas en .NET Framework versión 1.1 para XmlReader limitan la posibilidad de heredar de XmlTextReader y XmlValidatingReader. En .NET Framework versión 1.0, cualquier componente puede heredar de XmlTextReader o XmlValidatingReader. Sin embargo, al haberse implementado una demanda de herencia en el constructor de XmlTextReader y XmlValidatingReader, en .NET Framework versión 1.1 sólo los componentes que disponen de confianza tienen la posibilidad de heredar de XmlTextReader o XmlValidatingReader.

La clase XmlReader define métodos que permiten extraer datos de código XML u omitir registros no deseados. La clase XmlReader se diferencia de SAX, que es un modelo de inserción en el que el analizador inserta eventos en la aplicación. Para obtener más información sobre la comparación con SAX, vea Comparar XmlReader con el modelo SAX.

La clase XmlReader contiene métodos que permiten:

  • Leer contenido XML cuando éste está disponible en su totalidad, por ejemplo, un archivo de texto XML.
  • Buscar la dimensión de la pila de elementos XML.
  • Determinar si un elemento tiene contenido o está vacío.
  • Leer y explorar atributos.
  • Omitir elementos y su contenido.

La clase XmlReader tiene propiedades que devuelven información, como:

  • Tipo y nombre del nodo actual.
  • Contenido del nodo actual.

Las implementaciones de la clase XmlReader extienden la clase base y varían en su diseño para satisfacer necesidades de diversos escenarios. En la tabla siguiente se describen las implementaciones de la clase XmlReader.

Clase Descripción
XmlTextReader (Clase) Lee secuencias de caracteres. Es un sistema de lectura de sólo avance que contiene métodos que devuelven información del contenido y los tipos de nodos. No se permite el uso de un esquema ni de una DTD (Document Type Definition, definición de tipo de documento) externa.
XmlNodeReader (Clase) Proporciona un analizador para una API DOM (Document Object Model, Modelo de objetos de documento) XML, como el árbol XmlNode. Acepta un árbol XmlNode y devuelve los nodos que encuentre en el árbol DOM, incluidos los de referencias a entidades. No se permite la validación del esquema o la DTD pero puede resolver las entidades definidas en la DTD.
XmlValidatingReader (Clase) Proporciona un analizador de XML, que puede realizar la validación o no, y es totalmente compatible con una DTD, un lenguaje XSD (XML Schema Definition, definición de esquemas XML) o un esquema XDR (XML-Data Reduced, reducido de datos XML). Acepta una clase XmlTextReader y servicios de validación de niveles por encima.
Creación de sistemas de lectura XML personalizados Permite derivaciones definidas por el programador de la clase XmlReader.

Nota   XmlTextReader y XmlValidatingReader sufren restricciones en cuanto al tamaño de los archivos que pueden leer. No pueden leer archivos mayores de 2 gigabytes. Si es posible, divida el archivo de código fuente en varios archivos más pequeños.

XsltReader es otra de las implementaciones que carece de un constructor público. Se crea como resultado de llamar al método Transform de la clase XslTransform. XsltReader proporciona la funcionalidad siguiente:

  • Aplica las reglas para que XML tenga un formato correcto.
  • No valida con respecto a DTD o esquemas.
  • No expande los atributos predeterminados, debido a que la información de la DTD (nodos DOCTYPE) no se expone en el modelo de datos XPath. Vea la propiedad XmlReader.IsDefault. Si tiene que expandir atributos predeterminados en el documento de origen para aplicar una transformación, se debe cargar el almacén de datos (por ejemplo, XmlDocument) a través de un sistema de lectura XmlValidatingReader.

Cada una de las clases XmlTextReader, XmlValidatingReader y XmlNodeReader se ha diseñado para escenarios diferentes. En la tabla siguiente se describe qué sistema de lectura hay que usar en cada escenario y el valor que hay que asignar a la propiedad ValidationType.

Escenario Sistema de lectura que usar Valor de la propiedad ValidationType
Se requiere un mayor rendimiento y no se necesita compatibilidad con ningún esquema ni DTD. XmlTextReader No disponible.
Se requiere que el código XML tenga un formato correcto, incluidas las entidades externas y los DocTypes con la DTD suministrada. XmlTextReader No disponible.
Se requiere que el código XML sea válido y tenga un formato correcto con respecto a la DTD. XmlValidatingReader Auto o DTD.
Se requiere que el código XML tenga un formato correcto y se valide con respecto a un esquema. XmlValidatingReader Auto cuando no hay ninguna DTD o esquema XDR disponible.
Se requiere que el código XML tenga un formato correcto cuando se secuencian datos XML a partir de un XmlNode. XmlNodeReader No disponible.

En la tabla siguiente se describe la forma en que los valores de las propiedades XmlResolver y XmlTextReader.Normalization de los diversos sistemas de lectura se pueden establecer para cumplir los requisitos de cada escenario.

La propiedad Normalization, cuando se establece en true, normaliza los caracteres de fin de línea en nodos de texto y de espacio en blanco y, además, normaliza los valores de los atributos según su tipo. En consecuencia, al establecer a true la propiedad Normalization se reduce el rendimiento si se compara con el efecto de dejar su valor predeterminado, que es false. Para obtener más información, vea XmlTextReader.Normalization (Propiedad).

La propiedad XmlResolver se usa para resolver recursos externos nombrados por un identificador URI, tales como un DTD externo o la localización de un esquema. Para obtener más información sobre cómo usar la propiedad XmlResolver con distintos sistemas de lectura, vea Resolver recursos mediante XmlResolver.

Escenario XmlResolver Propiedad Normalization
Se requiere un mayor rendimiento y no se necesita compatibilidad con ningún esquema ni DTD. Establecer como una referencia nula. Para obtener más información, vea XmlTextReader.XmlResolver (Propiedad). Establecer a false.
Se requiere que el documento tenga un formato correcto, incluidas las entidades externas y los DocTypes con la DTD suministrada. Establecer como una referencia no nula. Todas las entidades externas se deben poder resolver. Para obtener más información, vea XmlTextReader.XmlResolver (Propiedad). Establecer a true.
Se requiere que el documento tenga un formato correcto y que el código XML sea válido con respecto a la DTD. Establecer como una referencia no nula. Todas las entidades externas se deben poder resolver. Para obtener más información, vea XmlValidatingReader.XmlResolver (Propiedad). Establecer a true en XmlTextReader antes de pasarlo a XmlValidatingReader.
Se requiere que el documento tenga un formato correcto y se valide con respecto a un esquema. Establecer como una referencia no nula. Todas las entidades externas se deben poder resolver. Para obtener más información, vea XmlValidatingReader.XmlResolver (Propiedad). Establecer a true en XmlTextReader antes de pasarlo a XmlValidatingReader.
Se requiere que el documento tenga un formato correcto cuando se secuencian datos XML a partir de un árbol XmlNode. No disponible. No disponible.

XmlValidatingReader proporciona servicios de validación sobre un XmlTextReader. Para obtener más información, vea Validación de XML con XmlValidatingReader.

Vea también

Ubicación del nodo actual en XmlReader | Configuración de propiedades en XmlReader | Comparación de objetos mediante XmlNameTable con XmlReader | Leer atributos con XmlReader | Leer el contenido de elementos y atributos | Omitir contenido con XmlReader | Lectura y expansión de EntityReference | Comparar XmlReader con el sistema de lectura SAX | Leer datos XML con XmlTextReader | Leer árboles de nodos con XmlNodeReader | Validar XML con XmlValidatingReader | Creación de sistemas de lectura XML personalizados | XmlReader (Clase) | XmlReader (Miembros) | XmlNodeReader (Clase) | XmlNodeReader (Miembros) | XmlTextReader (Clase) | XmlTextReader (Miembros) | XmlValidatingReader (Clase) | XmlValidatingReader (Miembros)