Поделиться через


Проверка согласованности данных с помощью 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.

Модуль чтения проверяет следующие условия.

  • Элемент верхнего уровня не должен содержать никаких узлов, кроме XML-декларации, DTD, элемента, комментария, пробела или инструкции по обработке.

  • XML-данные должны содержать ровно один узел элемента на верхнем уровне.

Fragment

XML-данные фрагмента соответствуют правильному формату XML-документа 1.0.

Этот параметр принимает XML-данные с несколькими корневыми элементами или текстовыми узлами на верхнем уровне.Этот уровень проверки гарантирует, что любое средство обработки сможет обработать считываемый поток как сущность XML 1.0 с внешним синтаксическим анализом.

ПримечаниеПримечание
DTD в фрагментах не разрешается.

Auto

Модуль чтения выбирает уровень согласованности, применяемый при проверке, на основании входных данных.

Проверка согласованности на уровне документа применяется, если XML-данные содержат сведения DTD.

Проверка согласованности фрагментов применяется, если в XML-данных содержится один из следующих случаев:

  • текст, CDATA или ссылка на сущность на корневом уровне;

  • Более одного элемента корневого уровня.

  • Отсутствие элемента корневого уровня.

Исключение XmlException создается, если обнаруживается конфликт, например если на корневом уровне одновременно существуют текстовый узел и DTD.

Это свойство можно использовать в сценариях с оболочками, когда метод Create используется для добавления дополнительных функций в существующий модуль XmlReader.В этом случае значение ConformanceLevel.Auto не вызывает дополнительную проверку согласованности.Проверка согласованности выполняется модулем XmlReader, для которого создается оболочка.

6bts1x50.collapse_all(ru-ru,VS.110).gifОбъекты 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

Другие ресурсы

Проверка XML-данных с помощью XmlReader