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


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

Объекты 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