Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase XmlReader

 

Publicado: octubre de 2016

Representa un lector que proporciona acceso rápido a datos XML, sin almacenamiento en caché y con desplazamiento solo hacia delante.

Para examinar el código fuente de .NET Framework para este tipo, vea la Reference Source.

Espacio de nombres:   System.Xml
Ensamblado:  System.Xml (en System.Xml.dll)


public abstract class XmlReader : IDisposable

NombreDescripción
System_CAPS_protmethodXmlReader()

Inicializa una nueva instancia de la clase XmlReader.

NombreDescripción
System_CAPS_pubpropertyAttributeCount

Cuando se invalida en una clase derivada, obtiene el número de atributos en el nodo actual.

System_CAPS_pubpropertyBaseURI

Cuando se invalida en una clase derivada, obtiene el identificador URI base del nodo actual.

System_CAPS_pubpropertyCanReadBinaryContent

Obtiene un valor que indica si XmlReader implementa los métodos de lectura de contenido binario.

System_CAPS_pubpropertyCanReadValueChunk

Obtiene un valor que indica si XmlReader implementa el método ReadValueChunk.

System_CAPS_pubpropertyCanResolveEntity

Obtiene un valor que indica si este lector puede analizar y resolver entidades.

System_CAPS_pubpropertyDepth

Cuando se invalida en una clase derivada, obtiene la profundidad del nodo actual en el documento XML.

System_CAPS_pubpropertyEOF

Cuando se invalida en una clase derivada, obtiene un valor que indica si el lector está situado al final del flujo.

System_CAPS_pubpropertyHasAttributes

Obtiene un valor que indica si el nodo actual tiene algún atributo.

System_CAPS_pubpropertyHasValue

Cuando se invalida en una clase derivada, obtiene un valor que indica si el nodo actual puede tener una Value.

System_CAPS_pubpropertyIsDefault

Cuando se reemplaza en una clase derivada, obtiene un valor que indica si el nodo actual es un atributo generado a partir del valor predeterminado definido en la DTD o el esquema.

System_CAPS_pubpropertyIsEmptyElement

Cuando se invalida en una clase derivada, obtiene un valor que indica si el nodo actual es un elemento vacío (por ejemplo, <MyElement/>).

System_CAPS_pubpropertyItem[Int32]

Cuando se invalida en una clase derivada, obtiene el valor del atributo con el índice especificado.

System_CAPS_pubpropertyItem[String]

Cuando se invalida en una clase derivada, obtiene el valor del atributo con el parámetro Name.

System_CAPS_pubpropertyItem[String, String]

Cuando se invalida en una clase derivada, obtiene el valor del atributo con el parámetro LocalName y NamespaceURI.

System_CAPS_pubpropertyLocalName

Cuando se invalida en una clase derivada, obtiene el nombre local del nodo actual.

System_CAPS_pubpropertyName

Cuando se invalida en una clase derivada, obtiene el nombre completo del nodo actual.

System_CAPS_pubpropertyNamespaceURI

Cuando se invalida en una clase derivada, obtiene el identificador URI de espacio de nombres (según se define en la especificación relativa a espacios de nombres del Consorcio W3C) del nodo en el que está situado el lector.

System_CAPS_pubpropertyNameTable

Cuando se invalida en una clase derivada, obtiene el XmlNameTable asociado a esta implementación.

System_CAPS_pubpropertyNodeType

Cuando se invalida en una clase derivada, obtiene el tipo del nodo actual.

System_CAPS_pubpropertyPrefix

Cuando se invalida en una clase derivada, obtiene el prefijo de espacio de nombres asociado al nodo actual.

System_CAPS_pubpropertyQuoteChar

Cuando se reemplaza en una clase derivada, obtiene el carácter de comillas entre las que se encierra el valor de un nodo de atributo.

System_CAPS_pubpropertyReadState

Cuando se invalida en una clase derivada, obtiene el estado del lector.

System_CAPS_pubpropertySchemaInfo

Obtiene la información de esquema asignada al nodo actual como resultado de la validación del esquema.

System_CAPS_pubpropertySettings

Obtiene el objeto XmlReaderSettings que se usa para crear esta instancia de XmlReader.

System_CAPS_pubpropertyValue

Cuando se invalida en una clase derivada, obtiene el valor de texto del nodo actual.

System_CAPS_pubpropertyValueType

Obtiene el tipo de Common Language Runtime (CLR) del nodo actual.

System_CAPS_pubpropertyXmlLang

Cuando se invalida en una clase derivada, obtiene la actual xml:lang ámbito.

System_CAPS_pubpropertyXmlSpace

Cuando se invalida en una clase derivada, obtiene la actual xml:space ámbito.

NombreDescripción
System_CAPS_pubmethodClose()

Cuando se invalida en una clase derivada, cambia el ReadState a Closed.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream)

Crea una nueva instancia XmlReader mediante el flujo especificado con la configuración predeterminada.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream, XmlReaderSettings)

Crea una nueva instancia de XmlReader con el flujo y la configuración especificados.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream, XmlReaderSettings, String)

Crea una nueva instancia de XmlReader usando el flujo, el URI base y la configuración especificados.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream, XmlReaderSettings, XmlParserContext)

Crea una nueva instancia XmlReader con el flujo, la configuración y la información de contexto especificados para el análisis.

System_CAPS_pubmethodSystem_CAPS_staticCreate(String)

Crea una nueva instancia de XmlReader con el URI especificado.

System_CAPS_pubmethodSystem_CAPS_staticCreate(String, XmlReaderSettings)

Crea una nueva instancia de XmlReader usando el URI y la configuración especificados.

System_CAPS_pubmethodSystem_CAPS_staticCreate(String, XmlReaderSettings, XmlParserContext)

Crea una nueva instancia de XmlReader usando el URI, la configuración y la información de contexto especificados.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader)

Crea una nueva instancia de XmlReader mediante el lector de texto especificado.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader, XmlReaderSettings)

Crea una nueva instancia XmlReader usando el lector de texto y la configuración especificados.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader, XmlReaderSettings, String)

Crea una nueva instancia de XmlReader mediante el lector de texto, la configuración y el URI base especificados.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader, XmlReaderSettings, XmlParserContext)

Crea una nueva instancia de XmlReader con el lector de texto, la configuración y la información de contexto especificados para el análisis.

System_CAPS_pubmethodSystem_CAPS_staticCreate(XmlReader, XmlReaderSettings)

Crea una nueva instancia de XmlReader con el lector XML y la configuración especificados.

System_CAPS_pubmethodDispose()

Libera todos los recursos usados por la instancia actual de la clase XmlReader.

System_CAPS_protmethodDispose(Boolean)

Libera los recursos no administrados que usa XmlReader y libera los recursos administrados de forma opcional.

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object).

System_CAPS_pubmethodGetAttribute(Int32)

Cuando se invalida en una clase derivada, obtiene el valor del atributo con el índice especificado.

System_CAPS_pubmethodGetAttribute(String)

Cuando se invalida en una clase derivada, obtiene el valor del atributo con el parámetro Name.

System_CAPS_pubmethodGetAttribute(String, String)

Cuando se invalida en una clase derivada, obtiene el valor del atributo con el parámetro LocalName y NamespaceURI.

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethodGetValueAsync()

Obtiene de forma asincrónica el valor del nodo actual.

System_CAPS_pubmethodSystem_CAPS_staticIsName(String)

Devuelve un valor que indica si el argumento de cadena es un nombre XML válido.

System_CAPS_pubmethodSystem_CAPS_staticIsNameToken(String)

Devuelve un valor que indica si el argumento de cadena es un token de nombre XML válido.

System_CAPS_pubmethodIsStartElement()

Llamadas MoveToContent y comprueba si el nodo de contenido actual es una etiqueta de apertura o una etiqueta de elemento vacío.

System_CAPS_pubmethodIsStartElement(String)

Llamadas MoveToContent y comprueba si el nodo de contenido actual es una etiqueta de apertura o una etiqueta de elemento vacío y si la Name propiedad del elemento encontrado coincide con el argumento especificado.

System_CAPS_pubmethodIsStartElement(String, String)

Llamadas MoveToContent y comprueba si el nodo de contenido actual es una etiqueta de apertura o una etiqueta de elemento vacío y si la LocalName y NamespaceURI Propiedades del elemento encontrado coinciden con las cadenas especificadas.

System_CAPS_pubmethodLookupNamespace(String)

Cuando se invalida en una clase derivada, resuelve un prefijo de espacio de nombres en el ámbito del elemento actual.

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_pubmethodMoveToAttribute(Int32)

Cuando se invalida en una clase derivada, se desplaza al atributo con el índice especificado.

System_CAPS_pubmethodMoveToAttribute(String)

Cuando se invalida en una clase derivada, se desplaza hasta el atributo con el especificado Name.

System_CAPS_pubmethodMoveToAttribute(String, String)

Cuando se invalida en una clase derivada, se desplaza hasta el atributo con el especificado LocalName y NamespaceURI.

System_CAPS_pubmethodMoveToContent()

Comprueba si el nodo actual es un contenido (texto sin espacios en blanco, CDATA, Element, EndElement, EntityReference, o EndEntity) nodo. Si el nodo no es un nodo de contenido, el lector salta hasta el siguiente nodo de contenido o el final del archivo. Omite los siguientes tipos de nodo: ProcessingInstruction, DocumentType, Comment, Whitespace o SignificantWhitespace.

System_CAPS_pubmethodMoveToContentAsync()

De forma asincrónica comprueba si el nodo actual es un nodo de contenido. Si el nodo no es un nodo de contenido, el lector salta hasta el siguiente nodo de contenido o el final del archivo.

System_CAPS_pubmethodMoveToElement()

Cuando se invalida en una clase derivada, se desplaza al elemento que contiene el nodo de atributo actual.

System_CAPS_pubmethodMoveToFirstAttribute()

Cuando se invalida en una clase derivada, se desplaza hasta el primer atributo.

System_CAPS_pubmethodMoveToNextAttribute()

Cuando se invalida en una clase derivada, se desplaza hasta el siguiente atributo.

System_CAPS_pubmethodRead()

Cuando se invalida en una clase derivada, lee el siguiente nodo del flujo.

System_CAPS_pubmethodReadAsync()

De forma asincrónica lee el nodo siguiente del flujo.

System_CAPS_pubmethodReadAttributeValue()

Cuando se invalida en una clase derivada, analiza el valor de atributo en uno o más Text, EntityReference, o EndEntity nodos.

System_CAPS_pubmethodReadContentAs(Type, IXmlNamespaceResolver)

Lee el contenido como objeto del tipo especificado.

System_CAPS_pubmethodReadContentAsAsync(Type, IXmlNamespaceResolver)

Lee asincrónicamente el contenido como objeto del tipo especificado.

System_CAPS_pubmethodReadContentAsBase64(Byte[], Int32, Int32)

Lee el contenido y devuelve los bytes binarios descodificados en Base64.

System_CAPS_pubmethodReadContentAsBase64Async(Byte[], Int32, Int32)

Lee asincrónicamente el contenido y devuelve los bytes binarios descodificados en Base64.

System_CAPS_pubmethodReadContentAsBinHex(Byte[], Int32, Int32)

Lee el contenido y devuelve los bytes binarios descodificados de BinHex.

System_CAPS_pubmethodReadContentAsBinHexAsync(Byte[], Int32, Int32)

Lee el contenido de forma asincrónica y devuelve el BinHex bytes binarios descodificados.

System_CAPS_pubmethodReadContentAsBoolean()

Lee el contenido de texto en la posición actual como un Boolean.

System_CAPS_pubmethodReadContentAsDateTime()

Lee el contenido de texto en la posición actual como un DateTime objeto.

System_CAPS_pubmethodReadContentAsDateTimeOffset()

Lee el contenido de texto en la posición actual como un DateTimeOffset objeto.

System_CAPS_pubmethodReadContentAsDecimal()

Lee el contenido de texto en la posición actual como un Decimal objeto.

System_CAPS_pubmethodReadContentAsDouble()

Lee el contenido de texto en la posición actual como número de punto flotante de precisión doble.

System_CAPS_pubmethodReadContentAsFloat()

Lee el contenido de texto en la posición actual como número de punto flotante de precisión sencilla.

System_CAPS_pubmethodReadContentAsInt()

Lee el contenido de texto en la posición actual como un entero de 32 bits con signo.

System_CAPS_pubmethodReadContentAsLong()

Lee el contenido de texto en la posición actual como un entero de 64 bits con signo.

System_CAPS_pubmethodReadContentAsObject()

Lee el contenido de texto en la posición actual como un Object.

System_CAPS_pubmethodReadContentAsObjectAsync()

De forma asincrónica lee el contenido de texto en la posición actual como un Object.

System_CAPS_pubmethodReadContentAsString()

Lee el contenido de texto en la posición actual como un String objeto.

System_CAPS_pubmethodReadContentAsStringAsync()

De forma asincrónica lee el contenido de texto en la posición actual como un String objeto.

System_CAPS_pubmethodReadElementContentAs(Type, IXmlNamespaceResolver)

Lee el contenido de los elementos como el tipo solicitado.

System_CAPS_pubmethodReadElementContentAs(Type, IXmlNamespaceResolver, String, String)

Comprueba que el nombre local especificado y el URI de espacio de nombres coinciden con los del elemento actual y, a continuación, lee el contenido de los elementos como el tipo solicitado.

System_CAPS_pubmethodReadElementContentAsAsync(Type, IXmlNamespaceResolver)

Lee asincrónicamente el contenido del elemento como el tipo solicitado.

System_CAPS_pubmethodReadElementContentAsBase64(Byte[], Int32, Int32)

Lee el elemento y descodifica el contenido de Base64.

System_CAPS_pubmethodReadElementContentAsBase64Async(Byte[], Int32, Int32)

Lee asincrónicamente el elemento y descodifica el contenido de Base64.

System_CAPS_pubmethodReadElementContentAsBinHex(Byte[], Int32, Int32)

Lee el elemento y descodifica el contenido de BinHex.

System_CAPS_pubmethodReadElementContentAsBinHexAsync(Byte[], Int32, Int32)

De forma asincrónica lee el elemento y descodifica el BinHex contenido.

System_CAPS_pubmethodReadElementContentAsBoolean()

Lee el elemento actual y devuelve el contenido como un Boolean objeto.

System_CAPS_pubmethodReadElementContentAsBoolean(String, String)

Comprueba que el nombre local especificado y el URI de espacio de nombres coinciden con del elemento actual, a continuación, lee el elemento actual y devuelve el contenido como un Boolean objeto.

System_CAPS_pubmethodReadElementContentAsDateTime()

Lee el elemento actual y devuelve el contenido como un DateTime objeto.

System_CAPS_pubmethodReadElementContentAsDateTime(String, String)

Comprueba que el nombre local especificado y el URI de espacio de nombres coinciden con del elemento actual, a continuación, lee el elemento actual y devuelve el contenido como un DateTime objeto.

System_CAPS_pubmethodReadElementContentAsDecimal()

Lee el elemento actual y devuelve el contenido como un Decimal objeto.

System_CAPS_pubmethodReadElementContentAsDecimal(String, String)

Comprueba que el nombre local especificado y el URI de espacio de nombres coinciden con del elemento actual, a continuación, lee el elemento actual y devuelve el contenido como un Decimal objeto.

System_CAPS_pubmethodReadElementContentAsDouble()

Lee el elemento actual y devuelve el contenido como número de punto flotante de precisión doble.

System_CAPS_pubmethodReadElementContentAsDouble(String, String)

Comprueba que el nombre local especificado y el URI del espacio de nombres coinciden con los del elemento actual y, a continuación, lee este elemento y devuelve el contenido como número de punto flotante de precisión doble.

System_CAPS_pubmethodReadElementContentAsFloat()

Lee el elemento actual y devuelve el contenido como número de punto flotante de precisión sencilla.

System_CAPS_pubmethodReadElementContentAsFloat(String, String)

Comprueba que el nombre local especificado y el URI del espacio de nombres coinciden con los del elemento actual y, a continuación, lee este elemento y devuelve el contenido como número de punto flotante de precisión sencilla.

System_CAPS_pubmethodReadElementContentAsInt()

Lee el elemento actual y devuelve el contenido como un entero de 32 bits con signo.

System_CAPS_pubmethodReadElementContentAsInt(String, String)

Comprueba que el nombre local especificado y el URI del espacio de nombres coinciden con los del elemento actual y, a continuación, lee el elemento actual y devuelve el contenido como entero de 32 bits con signo.

System_CAPS_pubmethodReadElementContentAsLong()

Lee el elemento actual y devuelve el contenido como un entero de 64 bits con signo.

System_CAPS_pubmethodReadElementContentAsLong(String, String)

Comprueba que el nombre local especificado y el URI del espacio de nombres coinciden con los del elemento actual y, a continuación, lee el elemento actual y devuelve el contenido como entero de 64 bits con signo.

System_CAPS_pubmethodReadElementContentAsObject()

Lee el elemento actual y devuelve el contenido como un Object.

System_CAPS_pubmethodReadElementContentAsObject(String, String)

Comprueba que el nombre local especificado y el URI de espacio de nombres coinciden con del elemento actual, a continuación, lee el elemento actual y devuelve el contenido como un Object.

System_CAPS_pubmethodReadElementContentAsObjectAsync()

De forma asincrónica lee el elemento actual y devuelve el contenido como un Object.

System_CAPS_pubmethodReadElementContentAsString()

Lee el elemento actual y devuelve el contenido como un String objeto.

System_CAPS_pubmethodReadElementContentAsString(String, String)

Comprueba que el nombre local especificado y el URI de espacio de nombres coinciden con del elemento actual, a continuación, lee el elemento actual y devuelve el contenido como un String objeto.

System_CAPS_pubmethodReadElementContentAsStringAsync()

De forma asincrónica lee el elemento actual y devuelve el contenido como un String objeto.

System_CAPS_pubmethodReadElementString()

Lee un elemento de solo texto. Sin embargo, se recomienda que utilice la ReadElementContentAsString() método en su lugar, ya que proporciona una manera más sencilla de controlar esta operación.

System_CAPS_pubmethodReadElementString(String)

Comprueba que el Name propiedad del elemento encontrado coincide con la cadena especificada antes de leer un elemento de sólo texto. Sin embargo, se recomienda que utilice la ReadElementContentAsString() método en su lugar, ya que proporciona una manera más sencilla de controlar esta operación.

System_CAPS_pubmethodReadElementString(String, String)

Comprueba que la LocalName y NamespaceURI Propiedades del elemento encontrado coinciden con las cadenas especificadas antes de leer un elemento de sólo texto. Sin embargo, se recomienda que utilice la ReadElementContentAsString(String, String) método en su lugar, ya que proporciona una manera más sencilla de controlar esta operación.

System_CAPS_pubmethodReadEndElement()

Comprueba si el nodo de contenido actual es una etiqueta de cierre y desplaza el lector hasta el siguiente nodo.

System_CAPS_pubmethodReadInnerXml()

Cuando se invalida en una clase derivada, lee todo el contenido, incluido el marcado, como una cadena.

System_CAPS_pubmethodReadInnerXmlAsync()

De forma asincrónica lee todo el contenido, incluido el marcado, como una cadena.

System_CAPS_pubmethodReadOuterXml()

Cuando se invalida en una clase derivada, lee el contenido, incluido el marcado, que representa este nodo y todos sus nodos secundarios.

System_CAPS_pubmethodReadOuterXmlAsync()

De forma asincrónica lee el contenido, incluido el marcado, que representa este nodo y todos sus elementos secundarios.

System_CAPS_pubmethodReadStartElement()

Comprueba si el nodo actual es un elemento y hace avanzar el sistema de lectura hasta el siguiente nodo.

System_CAPS_pubmethodReadStartElement(String)

Comprueba que el nodo de contenido actual es un elemento con el determinado Name y desplaza el lector hasta el siguiente nodo.

System_CAPS_pubmethodReadStartElement(String, String)

Comprueba que el nodo de contenido actual es un elemento con el determinado LocalName y NamespaceURI y desplaza el lector hasta el siguiente nodo.

System_CAPS_pubmethodReadString()

Cuando se reemplaza en una clase derivada, lee el contenido de un nodo de elemento o de texto como una cadena. Sin embargo, se recomienda que utilice la ReadElementContentAsString método en su lugar, ya que proporciona una manera más sencilla de controlar esta operación.

System_CAPS_pubmethodReadSubtree()

Devuelve un nuevo XmlReader instancia que puede utilizarse para leer el nodo actual y todos sus descendientes.

System_CAPS_pubmethodReadToDescendant(String)

Hace avanzar el XmlReader hasta el siguiente elemento descendiente con el nombre completo especificado.

System_CAPS_pubmethodReadToDescendant(String, String)

Hace avanzar el XmlReader hasta el siguiente elemento descendiente con el nombre local especificado y el URI de espacio de nombres.

System_CAPS_pubmethodReadToFollowing(String)

Lee hasta que encuentra un elemento con el nombre completo especificado.

System_CAPS_pubmethodReadToFollowing(String, String)

Lee hasta que encuentra un elemento con el nombre local y el URI de espacio de nombres especificados.

System_CAPS_pubmethodReadToNextSibling(String)

Hace avanzar el XmlReader hasta el siguiente elemento relacionado con el nombre completo especificado.

System_CAPS_pubmethodReadToNextSibling(String, String)

Hace avanzar el objeto XmlReader al siguiente elemento del mismo nivel que tenga el URI del espacio de nombres y el nombre local especificados.

System_CAPS_pubmethodReadValueChunk(Char[], Int32, Int32)

Lee grandes flujos de texto incrustados en un documento XML.

System_CAPS_pubmethodReadValueChunkAsync(Char[], Int32, Int32)

Lee asincrónicamente grandes flujos de texto incrustados en un documento XML.

System_CAPS_pubmethodResolveEntity()

Cuando se invalida en una clase derivada, resuelve la referencia de entidad de EntityReference nodos.

System_CAPS_pubmethodSkip()

Omite los nodos secundarios del nodo actual.

System_CAPS_pubmethodSkipAsync()

Omite de forma asincrónica los elementos secundarios del valor del nodo actual.

System_CAPS_pubmethodToString()

Devuelve una cadena que representa al objeto actual. (Heredado de Object).

System_CAPS_noteNota

Para ver el código fuente de .NET Framework para este tipo, consulte el Reference Source. Puede examinar el código fuente en línea, descargue la referencia para verla sin conexión y recorrer (incluidas las revisiones y actualizaciones) durante la depuración; see instructions.

XmlReader proporciona acceso de solo avance y de sólo lectura a datos XML en undocumento o la secuencia. Esta clase se ajusta a la W3C Extensible Markup Language (XML) 1.0 (fourth edition) y Namespaces in XML 1.0 (third edition) recomendaciones.

XmlReadermétodos le permiten desplazarse por los datos XML y leer el contenido de un nodo. Las propiedades de la clase reflejan el valor del nodo actual, que es donde está situado el lector. El valor de la propiedad ReadState indica el estado actual del lector XML. Por ejemplo, la propiedad se establece en Initial por el XmlReader.Read método y Closed por el XmlReader.Close (método). XmlReader También proporciona comprobaciones del cumplimiento en datos y validación frente a una DTD o esquema.

XmlReaderutiliza un modelo de extracción para recuperar datos. Este modelo:

  • Simplifica la administración de estados mediante un perfeccionamiento natural, de arriba a abajo procedimientos.

  • Admite varios flujos de entrada y distribución en capas.

  • Permite al cliente proporcionar al analizador un búfer en el que se escribe directamente la cadena y, por tanto, evita la necesidad de una copia de la cadena adicional.

  • Admite el procesamiento selectivo. El cliente puede omitir los elementos y procesarlos que son de interés para la aplicación. También puede establecer propiedades de antemano para administrar cómo se procesa la secuencia XML (por ejemplo, normalization).

En esta sección:

Crear un lector XML
Validación de datos XML
Cumplimiento en datos
Navegar por nodos
Elementos XML de lectura
Atributos de lectura XML
Contenido de lectura XML
Convertir a tipos CLR
Programación asincrónica
Consideraciones de seguridad

Utilice la Create método para crear un XmlReaderinstancia.

Aunque .NET Framework proporciona implementaciones concretas de la XmlReader de clase, como el XmlTextReader, XmlNodeReader, y XmlValidatingReader las clases, se recomienda que use las clases especializadas solamente en estos escenarios:

  • Si desea que el subárbol del DOM XML readan desde un XmlNode objeto, utilice la XmlNodeReader clase. (Sin embargo, esta clase no admite la validación DTD o esquema).

  • Si debe expandir entidades a solicitud, no desea que el texto contenido normalizado o no desea que los atributos devueltos predeterminados, utilice la XmlTextReader clase.

Para especificar el conjunto de características que desea habilitar en el lector XML, pase un System.Xml.XmlReaderSettings de objeto para el Create (método). Puede usar una sola System.Xml.XmlReaderSettings de objeto para crear varios sistemas de lectura con la misma funcionalidad o modificar el System.Xml.XmlReaderSettingsobjeto para crear un nuevo lector con un conjunto diferente de características. Puede agregar fácilmente características a un sistema de lectura existente.

Si no utiliza unSystem.Xml.XmlReaderSettingsde objeto, se utiliza la configuración predeterminada. Consulte la Create página de referencia para obtener más información.

XmlReader se produce un XmlException errores de análisis de XML. Tras una excepción, el estado del lector es imprevisible. Por ejemplo, el tipo de nodo notificado puede ser diferente del tipo de nodo real del nodo actual. Utilice la ReadState propiedad para comprobar si el lector está en estado de error.

Para definir la estructura de un documento XML y sus relaciones de elementos, tipos de datos y restricciones de contenido, utilice una definición de tipo de documento (DTD) o esquema (XSD). Se considera que un documento XML correcto si cumple todos los requisitos sintácticos definidos por el W3C XML 1.0 Recommendation. Se considera válido si tiene el formato correcto y además cumpla las restricciones que define su DTD o esquema. (Consulte la W3C XML Schema Part 1: Structures y W3C XML Schema Part 2: Datatypesrecomendaciones.) Por lo tanto, aunque todos los documentos XML válidos sean correctos, no todos los documentos XML correctos son válidos.

Puede validar los datos con una DTD, un esquema XSD, en línea o un esquema XSD se almacena en un XmlSchemaSet objeto (caché); estos escenarios se describen en la Create página de referencia. XmlReader no admite la validación de esquemas reducidos de datos XML (XDR).

Utilice la siguiente configuración en el XmlReaderSettings clase para especificar qué tipo de validación, si los hay, elXmlReader es compatible con la instancia.

Utilice esta XmlReaderSettings miembro

Para especificar

DtdProcessing propiedad

Si se permite el procesamiento de DTD. El valor predeterminado es no permitir el procesamiento de DTD.

Propiedad ValidationType

Si el lector debe validar los datos y qué tipo de validación para realizar (DTD o esquema). El valor predeterminado es que no hay validación de datos.

Evento ValidationEventHandler

Un controlador de eventos para recibir información acerca de los eventos de validación. Si no se proporciona un controlador de eventos, se inicia una XmlException en el primer error de validación.

Propiedad ValidationFlags

Opciones de validación adicional a través de los XmlSchemaValidationFlags miembros de enumeración:

  • AllowXmlAttributes--Permite atributos XML (xml:*) en documentos de instancia, incluso cuando no están definidos en el esquema. Los atributos se validan basándose en su tipo de datos. Consulte la XmlSchemaValidationFlags página de referencia de la configuración para usar en escenarios específicos. (Deshabilitado de forma predeterminada).

  • ProcessIdentityConstraints --Procesar las restricciones de identidad (xs:ID, xs:IDREF, xs:key, xs:keyref, xs:unique) detectado durante la validación. (Habilitado de forma predeterminada).

  • ProcessSchemaLocation --Procesar esquemas que especifican el xsi:schemaLocation o xsi:noNamespaceSchemaLocation atributo. (Habilitado de forma predeterminada).

  • ProcessInlineSchema--Procesar alineado esquemas XML durante la validación. (Deshabilitado de forma predeterminada).

  • ReportValidationWarnings--Informes eventos si se produce una advertencia de validación. Normalmente se produce una advertencia cuando no hay ninguna DTD ni esquema XML para validar un elemento o atributo en particular. ValidationEventHandler se utiliza para las notificaciones. (Deshabilitado de forma predeterminada).

Schemas

XmlSchemaSet que se va a usar para validación.

Propiedad XmlResolver

El XmlResolverpara resolver y tener acceso a recursos externos. Esto puede incluir entidades externas como DTD y esquemas y cualquier xs:include o xs:import elementos incluidos en el esquema XML. Si no especifica un XmlResolver, el XmlReader utiliza el valor predeterminado es XmlUrlResolver sin credenciales de usuario.

Los lectores XML que se crean mediante el Create methodmeet los siguientes requisitos de cumplimiento de normas de manera predeterminada:

  • Las nuevas líneas y el valor de atributo se normalizan según el W3C XML 1.0 Recommendation.

  • Todas las entidades se expanden automáticamente.

  • Siempre se agregan atributos predeterminados declarados en la definición de tipo de documento incluso cuando no valida el lector.

  • Se permite la declaración del prefijo XML asignado al espacio de nombres XML correcto URI.

  • Los nombres de notación en una sola NotationType declaración de atributos yNmTokens en una sola Enumeration declarationare distinto del atributo.

Utilice estos XmlReaderSettings Propiedades para especificar el tipo de conformidad comprueba desea habilitar:

Utilice esta XmlReaderSettings propiedad

TO

Predeterminado

Propiedad CheckCharacters

Habilitar o deshabilitar comprueba lo siguiente:

  • Caracteres están dentro del intervalo de caracteres XML legales, tal como se define por la 2.2 Characters sección de la recomendación W3C XML 1.0.

  • Todos los nombres XML son válidos, como se define por la 2.3 Common Syntactic Constructs sección de la recomendación W3C XML 1.0.

Cuando esta propiedad se establece en true (valor predeterminado), un XmlException excepción se produce si el archivo XML contiene caracteres no válidos o nombres XML no válidos (por ejemplo, un nombre de elemento se inicia con un número).

Carácter y la comprobación de nombres está habilitada.

Establecer CheckCharacters a false desactiva la comprobación de referencias de entidad de carácter del carácter. Si el sistema de lectura procesa datos de texto, siempre comprueba que los nombres XML sean válidos, independientemente de esta configuración.

System_CAPS_noteNota

La recomendación de XML 1.0 requiere que haya cumplimiento a nivel del documento cuando hay una DTD. Por lo tanto, si el lector está configurado para admitir ConformanceLevel.Fragment, pero los datos XML contienen una definición de tipo de documento (DTD), un XmlException se produce.

Propiedad ConformanceLevel

Elija el nivel de conformidad para aplicar:

Si los datos no cumplen las reglas, un XmlException excepción.

Document

El nodo actual es el nodo XML en el que está situado actualmente el lector XML. Todos los XmlReadermétodos realizan operaciones de este nodo y todos XmlReaderpropiedades reflejan el valor del nodo actual.

Los métodos siguientes facilitan para desplazarse por los nodos y analizar datos.

Utilice esta XmlReaderSettings (método)

TO

Read

Leer el primer nodo y avanza a través de un nodo de secuencia a la vez. Tales llamadas se realizan normalmente dentro de un while bucle.

Utilice la NodeType propiedad para obtener el tipo (por ejemplo, atributo, comentario, elemento etc.) del nodo actual.

Skip

Omita a los elementos secundarios del nodo actual y vaya al nodo siguiente.

MoveToContent y MoveToContentAsync

Omitir nodos sin contenido y mover al siguiente nodo de contenido o hasta el final del archivo.

Los nodos de contenido no incluyen ProcessingInstruction, DocumentType, Comment, Whitespace, y SignificantWhitespace.

Nodos de contenido incluyen texto sin espacios en blanco, CDATA, EntityReference , yEndEntity.

ReadSubtree

Leer un elemento y todos sus nodos secundarios y devolver un nuevo XmlReader instancia establecida en ReadState.Initial.

Este método es útil para crear límites alrededor de los elementos XML Por ejemplo, si desea pasar datos a otro componente para su procesamiento y desea limitar la cantidad de datos el componente puede tener acceso.

Consulte la XmlReader.Read página de referencia para obtener un ejemplo de navegar a través de un una nodo secuencia de texto a la vez y mostrar el tipo de cada nodo.

Las secciones siguientes describen cómo puede leer tipos específicos de datos, como elementos, atributos y datos con tipo.

La tabla siguiente enumeran los métodos y propiedades que el XmlReader clase se proporciona para procesar elementos. Después de que XmlReader se sitúe en un elemento, las propiedades del nodo como, por ejemplo, Name, reflejan los valores del elemento. Además de los miembros que se describen a continuación, también se puede utilizar cualquiera de los métodos y propiedades generales de la clase XmlReader para procesar elementos. Por ejemplo, puede utilizar el método ReadInnerXml para leer el contenido de un elemento.

System_CAPS_noteNota

Vea la sección 3.1 de la W3C XML 1.0 Recommendation para obtener definiciones de las etiquetas iniciales, finalizar las etiquetas y etiquetas de elemento vacío.

Utilice esta XmlReader miembro

TO

Método IsStartElement

Compruebe si el nodo actual es una etiqueta de apertura o una etiqueta de elemento vacío.

Método ReadStartElement

Compruebe que el nodo actual es un elemento y avanzar el lector hasta el siguiente nodo (llamadas IsStartElement seguido de Read).

Método ReadEndElement

Compruebe que el nodo actual es una etiqueta de cierre y avanzar el lector hasta el siguiente nodo.

Método ReadElementString

Leer un elemento de sólo texto.

Método ReadToDescendant

Avanza el lector XML al siguiente elemento descendiente (secundario) que tiene el nombre especificado.

Método ReadToNextSibling

Avanza el lector XML para el siguiente elemento relacionado con el nombre especificado.

Propiedad IsEmptyElement

Compruebe si el elemento actual tiene una etiqueta de elemento final. Por ejemplo:

  • <item num="123"/> (IsEmptyElement es true).

  • <item num="123"> </item> (IsEmptyElement es false, aunque el contenido del elemento está vacío.)

Para obtener un ejemplo de leer el contenido de texto de elementos, vea el ReadString método. En el ejemplo siguiente se procesa elementos utilizando un while bucle.

while (reader.Read()) {
  if (reader.IsStartElement()) {
    if (reader.IsEmptyElement)
      Console.WriteLine("<{0}/>", reader.Name);
    else {
      Console.Write("<{0}> ", reader.Name);
      reader.Read(); // Read the start tag.
      if (reader.IsStartElement())  // Handle nested elements.
        Console.Write("\r\n<{0}>", reader.Name);
      Console.WriteLine(reader.ReadString());  //Read the text content of the element.
    }
  } 
} 

Los atributos XML se suelen encontrar en elementos, pero también se permiten en la declaración XML y los nodos de tipo de documento.

Cuando está situado en un nodo de elemento, el MoveToAttribute método le permite recorrer en iteración la lista de atributos del elemento. Tenga en cuenta que después de MoveToAttribute se ha llamado, propiedades de nodo como Name, NamespaceURI, y Prefix reflejan las propiedades de dicho atributo, no las propiedades del elemento del atributo que pertenece.

La XmlReader clase proporciona estos métodos y propiedades para leer y procesar atributos en elementos.

Utilice esta XmlReader miembro

TO

Propiedad HasAttributes

Comprobar si el nodo actual tiene atributos.

Propiedad AttributeCount

Obtiene el número de atributos en el elemento actual.

Método MoveToFirstAttribute

Mover al primer atributo en un elemento.

Método MoveToNextAttribute

Mover hasta el siguiente atributo en un elemento.

Método MoveToAttribute

Mover a un atributo especificado.

GetAttribute método o Item propiedad

Obtiene el valor de un atributo especificado.

Propiedad IsDefault

Compruebe si el nodo actual es un atributo generado a partir del valor predeterminado definido en la DTD o esquema.

Método MoveToElement

Desplazarse al elemento que posee el atributo actual. Utilice este método para volver a un elemento después de navegar a través de sus atributos.

Método ReadAttributeValue

Analizar el valor de atributo en uno o varios Text, EntityReference, o EndEntitynodos.

También se puede utilizar cualquiera de las propiedades y los métodos XmlReader generales para procesar atributos. Por ejemplo, después de situar XmlReader en un atributo, las propiedades Name y Value reflejan los valores del atributo. También puede utilizar cualquiera de los métodos Read de contenido para obtener el valor del atributo.

Este ejemplo se utiliza la AttributeCount propiedad para desplazarse por todos los atributos en un elemento.

// Display all attributes.
if (reader.HasAttributes) {
  Console.WriteLine("Attributes of <" + reader.Name + ">");
  for (int i = 0; i < reader.AttributeCount; i++) {
    Console.WriteLine("  {0}", reader[i]);
  }
  // Move the reader back to the element node.
  reader.MoveToElement(); 
}

Este ejemplo se utiliza la MoveToNextAttribute método en un while bucle para navegar por los atributos.

if (reader.HasAttributes) {
  Console.WriteLine("Attributes of <" + reader.Name + ">");
  while (reader.MoveToNextAttribute()) {
    Console.WriteLine(" {0}={1}", reader.Name, reader.Value);
  }
  // Move the reader back to the element node.
  reader.MoveToElement();
}

Lectura de atributos en nodos de declaraciones XML

Cuando se sitúa el lector XML en un nodo de declaración XML, la Value propiedad devuelve la información de versión, independiente y codificación como una sola cadena. XmlReader los objetos creados por la Create (método), el XmlTextReader (clase) y el XmlValidatingReaderclase expone la versión, independiente y elementos de codificación como atributos.

Lectura de atributos en nodos de tipo de documento

Cuando se sitúa el lector XML en un nodo de tipo de documento, el GetAttribute método y Item propiedad puede utilizarse para devolver los valores de los literales SYSTEM y PUBLIC. Por ejemplo, al llamar a reader.GetAttribute("PUBLIC"), se devuelve el valor PUBLIC.

Leer atributos en nodos de instrucción de procesamiento

Cuando XmlReader está situado en un nodo de instrucción de procesamiento, la propiedad Value devuelve el contenido de texto completo. Elementos en el nodo de instrucción de procesamiento no se tratan como atributos. No se puede leer con el GetAttribute o MoveToAttribute (método).

La clase XMLReader incluye a los siguientes miembros que leen el contenido de un archivo XML y devuelve el contenido como valores de cadena. (Para devolver tipos CLR, consulte la siguiente sección.)

Utilice esta XmlReader miembro

TO

Propiedad Value

Obtener el contenido de texto del nodo actual. El valor devuelto depende del tipo de nodo; Consulte la Value página de referencia para obtener más información.

Método ReadString

Obtener el contenido de un nodo de elemento o de texto como una cadena. Este método se detiene en instrucciones de procesamiento y comentarios.

Para obtener más información acerca de cómo este método controla los tipos de nodo específico, consulte la ReadString página de referencia.

Métodos ReadInnerXml y ReadInnerXmlAsync

Obtener todo el contenido del nodo actual, incluido el marcado, pero excluidas las etiquetas de inicio y finalización. Por ejemplo, para:

<node>this<child id="123"/></node>

ReadInnerXml Devuelve:

this<child id="123"/>

Métodos ReadOuterXml y ReadOuterXmlAsync

Obtener todo el contenido del nodo actual y sus elementos secundarios, incluidas las etiquetas de marcado y de inicio y finalización. Por ejemplo, para:

<node>this<child id="123"/></node>

ReadOuterXml Devuelve:

<node>this<child id="123"/></node>

Puede utilizar los miembros de la XmlReader clase (que se muestran en la tabla siguiente) para leer datos XML y devolver valores como common language runtime (CLR) de tipos en lugar de cadenas. Estos miembros le permiten obtener valores en la representación que es más adecuada para su tarea de codificación sin tener que analizar manualmente o convertir los valores de cadena.

  • El ReadElementContentAs sólo se pueden llamar métodos en tipos de nodo de elemento. Estos métodos no se pueden utilizar en elementos que contienen elementos segundarios o incluyen contenido mixto. Al llamar al objeto XmlReader, éste lee la etiqueta de inicio y el contenido del elemento y, a continuación, se mueve después de la etiqueta del elemento de fin. Las instrucciones de procesamiento y los comentarios se omiten y las entidades se expanden.

  • El ReadContentAsmétodos leen el contenido de texto en la posición actual del lector y si los datos XML no tienen ningún esquema o datos escriba información asociada con él, convertir el contenido de texto en el tipo de valor devuelto solicitado. El texto, el espacio en blanco, el espacio en blanco significativo y las secciones CDATA se concatenan. Comentarios y las instrucciones de procesamiento se omiten y las referencias de entidad se resuelven automáticamente.

La XmlReader clase utiliza las reglas definidas por el W3C XML Schema Part 2: Datatypesrecomendación.

Utilice esta XmlReader(método)

Para devolver este tipo CLR

ReadContentAsBoolean y ReadElementContentAsBoolean

Boolean

ReadContentAsDateTime y ReadElementContentAsDateTime

DateTime

ReadContentAsDouble y ReadElementContentAsDouble

Double

ReadContentAsLong y ReadElementContentAsLong

Int64

ReadContentAsInt y ReadElementContentAsInt

Int32

ReadContentAsString y ReadElementContentAsString

String

ReadContentAs y ReadElementContentAs

El tipo especificado con el returnType parámetro

ReadContentAsObject y ReadElementContentAsObject

El tipo más adecuado, según lo especificado por el XmlReader.ValueType propiedad. Consulte Compatibilidad de tipos en las clases System.Xml para obtener información de asignación.

Si un elemento no se puede convertir fácilmente a un tipo CLR debido a su formato, puede utilizar una asignación de esquema para garantizar una conversión correcta. En el ejemplo siguiente se utiliza un archivo .xsd para convertir el hire-date elemento a la xs:date tipo y, a continuación, utiliza el ReadElementContentAsDateTime para devolver el elemento como un DateTime objeto.

Entrada (Hiredate1.XML):

<employee xmlns="urn:empl-hire">
    <ID>12365</ID>
    <hire-date>2003-01-08</hire-date>
    <title>Accountant</title>
</employee>

Esquema (hireDate.xsd):

<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:empl-hire" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="employee">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ID" type="xs:unsignedShort" />
        <xs:element name="hire-date" type="xs:date" />
        <xs:element name="title" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Código:

// Create a validating XmlReader object. The schema 
// provides the necessary type information.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add("urn:empl-hire", "hireDate.xsd");
using (XmlReader reader = XmlReader.Create("hireDate.xml", settings)) {

  // Move to the hire-date element.
  reader.MoveToContent();
  reader.ReadToDescendant("hire-date");

  // Return the hire-date as a DateTime object.
  DateTime hireDate = reader.ReadElementContentAsDateTime();
  Console.WriteLine("Six Month Review Date: {0}", hireDate.AddMonths(6));
}

Resultado:

Six Month Review Date:  7/8/2003 12:00:00 AM

La mayoría de los XmlReader métodos tienen homólogos asincrónicos que tienen "Async" al final de los nombres de método. Por ejemplo, el equivalente asincrónico de ReadContentAsObject es ReadContentAsObjectAsync.

Los siguientes métodos pueden utilizarse con llamadas a métodos asincrónicos:

Las secciones siguientes describen el uso asincrónico para métodos que no tienen homólogos asincrónicos.

método ReadStartElement

public static async Task ReadStartElementAsync(this XmlReader reader, string localname, string ns)
{
    if (await reader.MoveToContentAsync() != XmlNodeType.Element)
    {
        throw new InvalidOperationException(reader.NodeType.ToString() + " is an invalid XmlNodeType");
    }
    if ((reader.LocalName == localname) && (reader.NamespaceURI == ns))
    {
        await reader.ReadAsync();
    }
    else
    {
        throw new InvalidOperationException("localName or namespace doesn’t match");
    }
}

ReadEndElement (método)

public static async Task ReadEndElementAsync(this XmlReader reader)
{
    if (await reader.MoveToContentAsync() != XmlNodeType.EndElement)
    {
        throw new InvalidOperationException();
    }
    await reader.ReadAsync();
}

ReadToNextSibling (método)

public static async Task<bool> ReadToNextSiblingAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find the next sibling
    XmlNodeType nt;
    do
    {
        await reader.SkipAsync();
        if (reader.ReadState != ReadState.Interactive)
            break;
        nt = reader.NodeType;
        if (nt == XmlNodeType.Element &&
             ((object)localName == (object)reader.LocalName) &&
             ((object)namespaceURI ==(object)reader.NamespaceURI))
        {
            return true;
        }
    } while (nt != XmlNodeType.EndElement && !reader.EOF);

    return false;
}

ReadToFollowing (método)

public static async Task<bool> ReadToFollowingAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find element with that name
    while (await reader.ReadAsync())
    {
        if (reader.NodeType == XmlNodeType.Element && ((object)localName == (object)reader.LocalName) && ((object)namespaceURI == (object)reader.NamespaceURI))
        {
            return true;
        }
    }
    return false;
}

ReadToDescendant (método)

public static async Task<bool> ReadToDescendantAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }
    // save the element or root depth
    int parentDepth = reader.Depth;
    if (reader.NodeType != XmlNodeType.Element)
    {
        // adjust the depth if we are on root node
        if (reader.ReadState == ReadState.Initial)
        {
            parentDepth--;
        }
        else
        {
            return false;
        }
    }
    else if (reader.IsEmptyElement)
    {
        return false;
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find the descendant
    while (await reader.ReadAsync() && reader.Depth > parentDepth)
    {
        if (reader.NodeType == XmlNodeType.Element && ((object)localName == (object)reader.LocalName) && ((object)namespaceURI == (object)reader.NamespaceURI))
        {
            return true;
        }
    }
    return false;
}

Tenga en cuenta lo siguiente cuando trabaje con el XmlReader clase:

  • Las excepciones producidas por el XmlReader pueden revelar información de ruta de acceso que desea no se ejecuta hasta la aplicación. La aplicación debe detectar las excepciones y procesarlas correctamente.

  • No habilite el procesamiento de DTD si le preocupa la denegación de problemas de servicio o si trabaja con orígenes de confianza. El procesamiento de DTD está deshabilitado de forma predeterminada para XmlReader objetos creados por la Create (método).

    Si tiene habilitado el procesamiento de DTD, puede utilizar XmlSecureResolver para restringir los recursos a los que tiene acceso XmlReader. También puede diseñar su aplicación para que el procesamiento XML se memoria y restricciones de tiempo. Por ejemplo, puede configurar límites de tiempo de espera en la aplicación ASP.NET.

  • Los datos XML pueden incluir referencias a recursos externos como, por ejemplo, un archivo de esquemas. De forma predeterminada, los recursos externos se resuelven utilizando un XmlUrlResolver objeto sin credenciales de usuario. Puede aumentar la protección aún más realizando cualquiera de las siguientes acciones:

  • El ProcessInlineSchema y ProcessSchemaLocation marcas de validación de un XmlReaderSettings objeto no se establecen de forma predeterminada. Esto ayuda a proteger el XmlReader contra ataques basados en esquemas cuando está procesando datos XML de un origen que no es de confianza. Cuando se establecen estas marcas, se utiliza el XmlResolver del objeto XmlReaderSettings para resolver las ubicaciones de esquemas que se encuentra en el documento de la instancia de XmlReader. Si el XmlResolver propiedad se establece en null, ubicaciones de esquemas no se resuelven aunque el ProcessInlineSchema y ProcessSchemaLocation se establecen las marcas de validación.

    Los esquemas agregados durante la validación agregan nuevos tipos y pueden cambiar el resultado de la validación del documento. Como consecuencia, los esquemas externos solo se deberían resolver desde orígenes de confianza.

    Se recomienda deshabilitar la ProcessIdentityConstraints marca al validar documentos XML de gran tamaño, no es de confianza en escenarios de alta disponibilidad con un esquema que tiene restricciones de identidad en una gran parte del documento. Esta marca está habilitada de forma predeterminada.

  • Los datos XML pueden contener un gran número de atributos, declaraciones de espacios de nombres, elementos anidados, etc. cuyo procesamiento tarda una cantidad de tiempo importante. Para limitar el tamaño de la entrada que se envía a la XmlReader, puede:

    • Limitar el tamaño del documento estableciendo la MaxCharactersInDocument propiedad.

    • Limitar el número de caracteres que resultan de expandir las entidades estableciendo la MaxCharactersFromEntities propiedad.

    • Crear una IStream implementación para el XmlReader.

  • El ReadValueChunk método puede utilizarse para controlar grandes secuencias de datos. Este método lee una pequeña cantidad de caracteres a la vez en lugar de asignar una única cadena para todo el valor.

  • Al leer un documento XML con un gran número de los únicos nombres locales, espacios de nombres o prefijos, puede producirse un problema. Si está utilizando una clase que deriva de XmlReader, y se llama a la LocalName, Prefix, o NamespaceURI propiedad para cada elemento, la cadena devuelta se agrega a un NameTable. La colección contenida por la NameTable nunca disminuye de tamaño, creando una pérdida de memoria virtual de los identificadores de cadena. Una forma de mitigarlo es derivar de la NameTable clase y exija una cuota de tamaño máximo. (No hay ninguna manera de evitar el uso de un NameTable, o para cambiar la NameTable cuando está lleno). Otra solución es evitar el uso de las propiedades mencionadas y utilizar en su lugar el MoveToAttribute método con el IsStartElement método siempre que sea posible; estos métodos no devuelven cadenas y, por tanto, evitan el problema de llenar demasiado la NameTable colección.

  • Los objetos XmlReaderSettings pueden contener información confidencial como, por ejemplo, credenciales de usuario. Un componente que no sea de confianza podría utilizar el objeto XmlReaderSettings y sus credenciales de usuario para crear objetos XmlReader para leer datos. Tenga cuidado al almacenar en caché XmlReaderSettings objetos, o al pasar la XmlReaderSettings objeto de un componente a otro.

  • No admita componentes como, por ejemplo, objetos NameTable, XmlNamespaceManager y XmlResolver, de un origen que no sea de confianza.

El ejemplo de código siguiente muestra cómo utilizar el análisis de APIto XML asincrónico.

async Task TestReader(System.IO.Stream stream)
{
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.Async = true;

    using (XmlReader reader = XmlReader.Create(stream, settings))
    {
        while (await reader.ReadAsync())
        {
            switch (reader.NodeType)
            {
                case XmlNodeType.Element:
                    Console.WriteLine("Start Element {0}", reader.Name);
                    break;
                case XmlNodeType.Text:
                    Console.WriteLine("Text Node: {0}",
                             await reader.GetValueAsync());
                    break;
                case XmlNodeType.EndElement:
                    Console.WriteLine("End Element {0}", reader.Name);
                    break;
                default:
                    Console.WriteLine("Other node {0} with value {1}",
                                    reader.NodeType, reader.Value);
                    break;
            }
        }
    }
}

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: