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