Проверка согласованности данных с помощью XmlReader
Объекты XmlReader, создаваемые методом Create, по умолчанию более согласованы, чем реализация XmlTextReader.Объекты XmlReader создаются с помощью метода Create, по умолчанию поддерживают следующие функции:
Нормализация символов перевода строки.
Раскрытие сущностей.
Добавление атрибутов по умолчанию.
Свойства XmlReaderSettings.CheckCharacters и XmlReaderSettings.ConformanceLevel позволяют указать тип проверок согласованности, которые следует включить в созданном объекте XmlReader.
Параметр CheckCharacters
При заданном свойстве CheckCharacters класса XmlReaderSettings модуль чтения проверяет символы и создает исключение XmlException, если обнаруживаются символы вне диапазона допустимых XML-символов.Если включена проверка символов, гарантируется выполнение следующих условий.
Все символы в документе лежат в диапазоне допустимых XML-символов, определенных в рекомендации W3C XML 1.0.
Все XML-имена являются допустимыми.Например, если имя элемента начинается с цифры, создается исключение XmlException.Дополнительные сведения см. по адресу http://www.w3.org/TR/REC-xml\#NT-Name.
По умолчанию проверка символов включена.Если модуль чтения обрабатывает текстовые данные, он всегда проверяет допустимость XML-имен, даже если свойство CheckCharacters имеет значение false.
Параметр ConformanceLevel
Если задано свойство ConformanceLevel класса XmlReaderSettings, модуль XmlReader выполняет проверку соответствия считываемого потока определенному набору правил.В зависимости от указанного уровня согласованности, XML-данные можно проверять на соответствие правильному формату XML-документа 1.0 или его фрагмента.Если данные не согласованы, возникает исключение XmlException.Параметр по умолчанию — ConformanceLevel.Document.
Примечание
Если модуль чтения настроен для поддержки значения ConformanceLevel.Fragment, но XML-данные содержат DTD, создается исключение XmlException.Рекомендация XML 1.0 требует согласованности на уровне документа, если присутствует DTD.
Значение ConformanceLevel |
Описание |
---|---|
Document |
XML-данные соответствуют правилам для XML-документа правильного формата версии 1.0.Этот уровень проверки гарантирует, что любое средство обработки сможет обработать считываемый поток как документ XML 1.0. Модуль чтения проверяет следующие условия.
|
Fragment |
XML-данные фрагмента соответствуют правильному формату XML-документа 1.0. Этот параметр принимает XML-данные с несколькими корневыми элементами или текстовыми узлами на верхнем уровне.Этот уровень проверки гарантирует, что любое средство обработки сможет обработать считываемый поток как сущность XML 1.0 с внешним синтаксическим анализом.
Примечание
DTD в фрагментах не разрешается.
|
Auto |
Модуль чтения выбирает уровень согласованности, применяемый при проверке, на основании входных данных. Проверка согласованности на уровне документа применяется, если XML-данные содержат сведения DTD. Проверка согласованности фрагментов применяется, если в XML-данных содержится один из следующих случаев:
Исключение XmlException создается, если обнаруживается конфликт, например если на корневом уровне одновременно существуют текстовый узел и DTD. Это свойство можно использовать в сценариях с оболочками, когда метод Create используется для добавления дополнительных функций в существующий модуль XmlReader.В этом случае значение ConformanceLevel.Auto не вызывает дополнительную проверку согласованности.Проверка согласованности выполняется модулем XmlReader, для которого создается оболочка. |
Объекты XmlTextReader, XmlValidatingReader и XmlNodeReader
Свойство ConformanceLevel при работе с объектами XmlTextReader, XmlValidatingReader или XmlNodeReader подчиняется следующим правилам.
Если объект XmlReader не был создан с помощью метода Create, предполагается уровень согласованности Document.В результате если этот экземпляр XmlReader заключается в оболочку другого объекта XmlReader, то при создании нового объекта XmlReader необходимо указывать уровень согласованности Document или Auto.
Если базовый объект XmlTextReader или XmlValidatingReader был создан с помощью объекта XmlParserContext и элемента XmlNodeType.Element, то также можно применять значение Fragment.
Пример
В следующем коде создается модуль чтения, который проверяет согласованность на уровне фрагментов.
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);
См. также
Основные понятия
Чтение XML с помощью XmlReader