Comprobación del cumplimiento en datos con XmlReader
Los objetos XmlReader que crea el método Create muestran, de manera predeterminada, un mayor cumplimiento que la implementación de XmlTextReader. Los objetos XmlReader que crea el método Create admiten las siguientes características de manera predeterminada:
Normalizan los caracteres de nueva línea.
Expanden entidades.
Agregan atributos predeterminados.
Las propiedades XmlReaderSettings.CheckCharacters y XmlReaderSettings.ConformanceLevel le permiten especificar el tipo de comprobaciones del cumplimiento que desea habilitar en el objeto XmlReader creado.
Valor de CheckCharacters
La propiedad CheckCharacters de la clase XmlReaderSettings pide al sistema de lectura que compruebe los caracteres e inicie una XmlException, si cualquiera de los caracteres se sale del intervalo de caracteres XML legales. Si habilita la comprobación de caracteres, tiene garantizado lo siguiente:
Todos los caracteres del documento están en el rango de caracteres XML legales, tal y como define la recomendación de XML 1.0 del W3C.
Todos los nombres XML son válidos. Por ejemplo, si el nombre de un elemento comienza por un número, se inicia una XmlException. Para obtener más información, vea http://www.w3.org/TR/REC-xml\#NT-Name.
De manera predeterminada, la comprobación de caracteres está habilitada. Si el sistema de lectura procesa datos de texto, siempre comprueba que todos los nombres XML sean válidos, incluso cuando la propiedad CheckCharacters está establecida en false.
Valor de ConformanceLevel
La propiedad ConformanceLevel de la clase XmlReaderSettings configura XmlReader para comprobar y garantizar que la secuencia que se está leyendo cumple un conjunto determinado de reglas. Dependiendo del nivel de cumplimiento que se especifique, se puede comprobar si los datos XML cumplen las reglas de un documento o un fragmento de documento de XML 1.0 correcto. Si los datos no cumplen las reglas, se inicia una XmlException. El valor predeterminado es ConformanceLevel.Document.
Nota |
---|
Si el sistema de lectura está configurado para permitir ConformanceLevel.Fragment, pero los datos XML contienen una definición de tipo de documento (DTD), se inicia una XmlException.La recomendación de XML 1.0 requiere que haya cumplimiento a nivel del documento cuando hay una DTD. |
Valor de ConformanceLevel |
Descripción |
---|---|
Documento |
Los datos XML cumplen las reglas de un documento de XML 1.0 correcto. Este nivel de comprobación garantiza que cualquier procesador pueda consumir la secuencia que se está leyendo como un documento XML 1.0. El sistema de lectura comprueba lo siguiente:
|
Fragmento |
Los datos XML cumplen las reglas de un fragmento de documento de XML 1.0 correcto. Este valor acepta datos XML con varios elementos raíz o nodos de texto en el nivel superior. Este nivel de comprobación garantiza que cualquier procesador pueda consumir la secuencia que se está leyendo como una entidad externa analizada de XML 1.0.
Nota
La DTD no está permitida en fragmentos.
|
Automático |
El sistema de lectura decide qué nivel de comprobación del cumplimiento va a aplicar basándose en los datos entrantes. La comprobación del cumplimiento en documentos se aplica si los datos XML contienen información DTD. La comprobación del cumplimiento en fragmentos se aplica si los datos XML contienen algo de lo siguiente:
Se inicia una XmlException si hay un conflicto como, por ejemplo, si hay un nodo de texto y una DTD en el nivel raíz. Este valor se puede utilizar en situaciones de contención, en las que se utiliza un método Create para agregar características adicionales a un XmlReader existente. En este caso, ConformanceLevel.Auto no agrega ninguna comprobación del cumplimiento nueva. La comprobación del cumplimiento se deja al XmlReader que se está conteniendo. |
Objetos XmlTextReader, XmlValidatingReader y XmlNodeReader
El valor de ConformanceLevel tiene el siguiente comportamiento cuando trabaja con objetos XmlTextReader, XmlValidatingReader o XmlNodeReader.
Si el objeto XmlReader no se ha creado utilizando el método Create, el nivel de cumplimiento que se supone es Document. Como resultado, si decide contener esta instancia de XmlReader en otro objeto XmlReader, al crear el nuevo objeto XmlReader el nivel de cumplimiento especificado debe ser Document o Auto.
Si el objeto XmlTextReader o XmlValidatingReader subyacente se ha construido utilizando el objeto XmlParserContext y XmlNodeType.Element, también se puede aplicar el valor Fragment.
Ejemplo
El siguiente código crea un sistema de lectura que exige el cumplimiento a nivel de fragmento.
Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.ConformanceLevel = ConformanceLevel.Fragment
Dim reader as XmlReader = XmlReader.Create(new StringReader(xmlString), settings)
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
XmlReader reader = XmlReader.Create(new StringReader(xmlString), settings);
Vea también
Conceptos
Leer fragmentos de XML con XmlReader