Compartir a través de


Creación de sistemas de lectura XML

Las instancias de XmlReader se crean utilizando el método Create. La clase XmlReaderSettings se utiliza para especificar el conjunto de características que desea habilitar en el objeto XmlReader.

Nota importanteImportante

Aunque Microsoft .NET Framework incluye implementaciones concretas de la clase XmlReader como, por ejemplo, las clases XmlTextReader, XmlNodeReader y XmlValidatingReader, en la versión 2.0 de .NET Framework se recomienda crear instancias de XmlReader con el método Create.

Las características se habilitan o deshabilitan con las propiedades de la clase XmlReaderSettings. A continuación, el objeto XmlReaderSettings se pasa al método Create.

Si utiliza el método Create y la clase XmlReaderSettings, se beneficiará de las siguientes ventajas:

  • Puede especificar qué características se van a admitir en el objeto XmlReader creado.

  • La clase XmlReaderSettings se puede volver a utilizar para crear varios objetos del sistema de lectura. Puede utilizar los mismos valores para crear varios sistemas de lectura con la misma funcionalidad. Por otra parte, puede modificar el objeto XmlReaderSettings y crear un nuevo sistema de lectura con un conjunto de características diferente.

  • Puede agregar características a un sistema de lectura existente. El método Create puede aceptar otro objeto XmlReader. El objeto XmlReader subyacente puede ser un sistema de lectura definido por el usuario o un objeto XmlTextReader, o bien otra instancia de XmlReader a la que desea agregar características adicionales.

  • Puede beneficiarse al máximo de todas las nuevas características que se han agregado a la clase XmlReader en la versión 2.0 de .NET Framework. Existen determinadas características como, por ejemplo, la mejora de la comprobación del cumplimiento y el cumplimiento de la recomendación 1.0 de XML, que solo están disponibles en objetos XmlReader creados por el método Create.

En la siguiente tabla se enumeran los valores predeterminados de la propiedad de la clase XmlReaderSettings.

Propiedad

Valor predeterminado

CheckCharacters

true

ConformanceLevel

ConformanceLevel.Document

IgnoreComments

false

IgnoreProcessingInstructions

false

IgnoreWhitespace

false

LineNumberOffset

0.

LinePositionOffset

0

NameTable

null

DtdProcessing

Prohibit

ProhibitDtd

true. Esta propiedad ha quedado obsoleta. Se utiliza DtdProcessing en su lugar.

Schemas

Un objeto XmlSchemaSet vacío

ValidationFlags

ProcessIdentityConstraints habilitado

ValidationType

ValidationType.None

XmlResolver

Un nuevo objeto XmlUrlResolver

Situaciones con XmlReader

En la siguiente tabla se describen algunas de las situaciones comunes y qué valores se deben aplicar en la clase XmlReaderSettings.

Situación

XmlReaderSettings

Requiere que los datos sean un documento XML correcto.

ConformanceLevel = ConformanceLevel.Document

Requiere que los datos sean una entidad analizada XML correcta.

ConformanceLevel = ConformanceLevel.Fragment

Necesita que los datos se validen con una DTD.

DtdProcessing = DtdProcessing.Parse

ValidationType = ValidationType.DTD

Necesita que los datos se validen con un esquema XML.

ValidationType = ValidationType.Schema

Schemas = XmlSchemaSet que se va a utilizar para la validación

Necesita que los datos se validen con un esquema XML alineado.

ValidationType = ValidationType.Schema

ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema

Necesita compatibilidad de tipos.

ValidationType = ValidationType.Schema

Schemas = XmlSchemaSet que se va a utilizar

Existen unas pocas situaciones especiales en las que es posible que se necesite utilizar una implementación de XmlReader que no haya creado el método Create.

NotaNota

La clase XmlValidatingReader está obsoleta en la versión 2.0 de .NET Framework.Le recomendamos que piense en la posibilidad de migrar a esquemas XML y realizar la validación utilizando un objeto XmlReader que devuelve el método Create.

  • Para leer datos XML desde un objeto XmlNode, utilice la clase XmlNodeReader.

  • Si debe expandir entidades a solicitud (los sistemas de lectura que ha creado el método Create expanden todas las entidades) o si no desea que se normalice el contenido de texto, utilice la clase XmlTextReader.

  • Si no desea que se devuelvan atributos predeterminados, utilice la clase XmlTextReader.

Para instanciar un objeto XmlReader

Dim settings As New XmlReaderSettings()
settings.ConformanceLevel = ConformanceLevel.Fragment
settings.IgnoreWhitespace = true
settings.IgnoreComments = true
Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create("books.xml", settings);

Para contener una instancia del sistema de lectura en otro sistema de lectura

Dim txtReader As XmlTextReader = New XmlTextReader("bookOrder.xml")
Dim settings As New XmlReaderSettings()
settings.Schemas.Add("urn:po-schema", "PO.xsd")
settings.ValidationType = ValidationType.Schema
Dim reader As XmlReader = XmlReader.Create(txtReader, settings)
XmlTextReader txtReader = new XmlTextReader("bookOrder.xml");
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("urn:po-schema", "PO.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create(txtReader, settings);

Para encadenar sistemas de lectura para agregar valores adicionales

Dim settings As New XmlReaderSettings()
settings.ValidationType = ValidationType.DTD
Dim inner As XmlReader = XmlReader.Create("book.xml", settings) ' DTD Validation
settings.Schemas.Add("urn:book-schema", "book.xsd")
settings.ValidationType = ValidationType.Schema
Dim outer As XmlReader = XmlReader.Create(inner, settings)  ' XML Schema Validation
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.DTD;
XmlReader inner = XmlReader.Create("book.xml", settings); // DTD Validation
settings.Schemas.Add("urn:book-schema", "book.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader outer = XmlReader.Create(inner, settings);  // XML Schema Validation

Vea también

Conceptos

Leer fragmentos de XML con XmlReader