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.
Importante |
---|
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 |
---|---|
true |
|
ConformanceLevel.Document |
|
false |
|
false |
|
false |
|
0. |
|
0 |
|
null |
|
true. Esta propiedad ha quedado obsoleta. Se utiliza DtdProcessing en su lugar. |
|
Un objeto XmlSchemaSet vacío |
|
ProcessIdentityConstraints habilitado |
|
ValidationType.None |
|
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.
- Si debe realizar la validación con un esquema XDR, utilice la clase XmlValidatingReader.
Nota |
---|
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