Métodos System.Xml.XmlReader.Create
En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.
La mayoría de las Create sobrecargas incluyen un settings
parámetro que acepta un XmlReaderSettings objeto . Puede usar este objeto para:
- Especifique qué características desea admitir en el XmlReader objeto .
- Vuelva a usar el XmlReaderSettings objeto para crear varios lectores. Puede utilizar los mismos valores para crear varios sistemas de lectura con la misma funcionalidad. O bien, puede modificar la configuración de una XmlReaderSettings instancia y crear un nuevo lector con un conjunto diferente de características.
- Agregue características a un lector XML existente. El método Create puede aceptar otro objeto XmlReader. El objeto subyacente XmlReader puede ser un lector definido por el usuario, un XmlTextReader objeto u otra XmlReader instancia a la que desea agregar características adicionales.
- Aproveche al máximo las características, como la comprobación de conformidad y el cumplimiento de la recomendación XML 1.0 (cuarta edición) que solo están disponibles en XmlReader los objetos creados por el método estático Create .
Nota:
Aunque .NET incluye implementaciones concretas de la XmlReader clase , como XmlTextReader, XmlNodeReadery las XmlValidatingReader clases, se recomienda crear XmlReader instancias mediante el Create método .
Configuración predeterminada
Si usa una Create sobrecarga que no acepta un XmlReaderSettings objeto, se usa la siguiente configuración de lector predeterminada:
Configuración | Valor predeterminado |
---|---|
CheckCharacters | true |
ConformanceLevel | ConformanceLevel.Document |
IgnoreComments | false |
IgnoreProcessingInstructions | false |
IgnoreWhitespace | false |
LineNumberOffset | 0 |
LinePositionOffset | 0 |
NameTable | null |
DtdProcessing | Prohibit |
Schemas | Un objeto XmlSchemaSet vacío |
ValidationFlags | ProcessIdentityConstraints Habilitado |
ValidationType | None |
XmlResolver | null |
Configuraciones para escenarios comunes
Estas son las XmlReaderSettings propiedades que debe establecer para algunos de los escenarios típicos del lector XML.
Requisito | Set |
---|---|
Los datos deben ser un documento XML bien formado. | De ConformanceLevel a Document. |
Los datos deben ser una entidad analizada xml bien formada. | De ConformanceLevel a Fragment. |
Los datos deben validarse con un DTD. | DtdProcessing a Parse De ValidationType a DTD. |
Los datos deben validarse con un esquema XML. | ValidationType a Schema Schemas a que XmlSchemaSet se va a usar para la validación. Tenga en cuenta que XmlReader no admite la validación del esquema XML-Data Reduced (XDR). |
Los datos deben validarse con un esquema XML insertado. | ValidationType a Schema De ValidationFlags a ProcessInlineSchema. |
Compatibilidad con tipos. | ValidationType a Schema Schemas a que XmlSchemaSet se va a usar. |
XmlReader no admite la validación del esquema XML-Data Reduced (XDR).
Programación asincrónica
En modo sincrónico, el Create método lee el primer fragmento de datos del búfer del archivo, la secuencia o el lector de texto. Esto puede producir una excepción si se produce un error en una operación de E/S. En modo asincrónico, la primera operación de E/S se produce con una operación de lectura, por lo que se producirán excepciones que surjan cuando se produzca la operación de lectura.
Consideraciones sobre la seguridad
De forma predeterminada, XmlReader usa un XmlUrlResolver objeto sin credenciales de usuario para abrir recursos. Esto significa que, de forma predeterminada, el lector XML puede acceder a cualquier ubicación que no requiera credenciales. Use la propiedad para controlar el XmlResolver acceso a los recursos:
- Establézcalo XmlResolver en un XmlSecureResolver objeto para restringir los recursos a los que puede acceder el lector XML, o bien...
- Establézcalo XmlResolver en
null
para impedir que el lector XML abra recursos externos.
Ejemplos
En este ejemplo se crea un lector XML que quita espacios en blanco insignificantes, se quitan comentarios y se realiza una comprobación de conformidad de nivel de fragmento.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create("books.xml", settings);
Dim settings As New XmlReaderSettings()
settings.ConformanceLevel = ConformanceLevel.Fragment
settings.IgnoreWhitespace = true
settings.IgnoreComments = true
Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
En el ejemplo siguiente se usa un XmlUrlResolver con credenciales predeterminadas para acceder a un archivo.
// Set the reader settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
settings.IgnoreProcessingInstructions = true;
settings.IgnoreWhitespace = true;
' Set the reader settings.
Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.IgnoreComments = true
settings.IgnoreProcessingInstructions = true
settings.IgnoreWhitespace = true
// Create a resolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Set the reader settings object to use the resolver.
settings.XmlResolver = resolver;
// Create the XmlReader object.
XmlReader reader = XmlReader.Create("http://ServerName/data/books.xml", settings);
' Create a resolver with default credentials.
Dim resolver as XmlUrlResolver = new XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
' Set the reader settings object to use the resolver.
settings.XmlResolver = resolver
' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("http://ServerName/data/books.xml", settings)
El código siguiente encapsula una instancia de lector dentro de otro lector.
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);
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)
En este ejemplo se encadena a los lectores para agregar la validación de esquemas DTD y XML.
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
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