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


Создание средств чтения XML

Экземпляры XmlReader создаются с помощью метода Create. Класс XmlReaderSettings используется для задания набора функций, которые нужно включить для объекта XmlReader.

Важное примечаниеВажно

Хотя платформа Microsoft .NET Framework располагает конкретными реализациями класса XmlReader, такими как классы XmlTextReader, XmlNodeReader и XmlValidatingReader, в .NET Framework version 2.0 рекомендуется создавать экземпляры XmlReader с помощью метода Create.

Функции включаются или отключаются с помощью свойств класса XmlReaderSettings. Объект XmlReaderSettings затем передается в метод Create.

Использование метода Create и класса XmlReaderSettings дает следующие преимущества:

  • Можно указать, какие возможности нужно поддерживать в создаваемом объекте XmlReader.

  • Для создания нескольких объектов средства чтения можно повторно использовать класс XmlReaderSettings. Можно использовать те же настройки для создания нескольких объектов средства чтения с одинаковой функциональностью. Или можно изменить объект XmlReaderSettings и создать новое средство чтения с другим набором функций.

  • Можно добавлять функции к существующему средству чтения. Метод Create может принимать другой объект XmlReader. Базовый объект XmlReader может быть средством чтения, определенным пользователем, или объектом XmlTextReader, или другим экземпляром XmlReader, в который нужно добавить функции.

  • Полностью используйте преимущества всех новых функций, добавленных в класс XmlReader в версии .NET Framework 2.0. Существуют определенные функции, такие как улучшенная проверка согласованности и соответствия рекомендациям XML 1.0, которые доступны только для объектов XmlReader, созданных методом Create.

В следующей таблице содержится список настроек свойств по умолчанию для класса XmlReaderSettings.

Свойство

Значение по умолчанию

CheckCharacters

true

ConformanceLevel

ConformanceLevel.Document

IgnoreComments

false

IgnoreProcessingInstructions

false

IgnoreWhitespace

false

LineNumberOffset

0.

LinePositionOffset

0

NameTable

null

DtdProcessing

Prohibit

ProhibitDtd

true. Данное свойство вышло из употребления. Пользуйтесь вместо этого методом DtdProcessing.

Schemas

Пустой объект XmlSchemaSet

ValidationFlags

ProcessIdentityConstraints включен

ValidationType

ValidationType.None

XmlResolver

Новый объект XmlUrlResolver

Сценарии XmlReader

В следующей таблице описаны некоторые типовые сценарии и применяемые настройки класса XmlReaderSettings.

Сценарий

XmlReaderSettings

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

ConformanceLevel = ConformanceLevel.Document

Данные должны представлять проанализированную сущность XML-документа правильного формата.

ConformanceLevel = ConformanceLevel.Fragment

Данные необходимо проверить на соответствие DTD.

DtdProcessing = DtdProcessing.Parse

ValidationType = ValidationType.DTD

Данные необходимо проверить на соответствие схеме XML.

ValidationType = ValidationType.Schema

Schemas = XmlSchemaSet для использования при проверке

Данные необходимо проверить на соответствие встроенной схеме XML.

ValidationType = ValidationType.Schema

ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema

Необходима поддержка типов.

ValidationType = ValidationType.Schema

Schemas = XmlSchemaSet для использования

Существует несколько особых сценариев, в которых может требоваться использование реализации класса XmlReader, не созданной методом Create.

  • Если нужно выполнить проверку на соответствие схеме XDR, следует использовать класс XmlValidatingReader.
ПримечаниеПримечание

Класс XmlValidatingReader устарел в версии .NET Framework 2.0.Рекомендуется рассмотреть возможность перехода на схемы XML и выполнить проверку с помощью объекта XmlReader, возвращенного методом Create.

  • Чтобы считать XML-данные из объекта XmlNode, используйте класс XmlNodeReader.

  • Если необходимо расширить сущности по запросу (средства чтения, созданные методом Create, расширяют все сущности), или, если нужно нормализовать текстовое содержимое, используйте класс XmlTextReader.

  • Если не нужно возвращать атрибуты по умолчанию, используйте класс XmlTextReader.

Создание экземпляра объекта XmlReader

Dim settings As New XmlReaderSettings()
settings.ConformanceLevel = ConformanceLevel.Fragment
settings.IgnoreWhitespace = true
settings.IgnoreComments = true
Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create("books.xml", settings);

Упаковка экземпляра средства чтения в другом средстве чтения

Dim txtReader As XmlTextReader = New XmlTextReader("bookOrder.xml")
Dim settings As New XmlReaderSettings()
settings.Schemas.Add("urn:po-schema", "PO.xsd")
settings.ValidationType = ValidationType.Schema
Dim reader As XmlReader = XmlReader.Create(txtReader, settings)
XmlTextReader txtReader = new XmlTextReader("bookOrder.xml");
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("urn:po-schema", "PO.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create(txtReader, settings);

Формирование цепочки средств чтения для добавления дополнительных настроек

Dim settings As New XmlReaderSettings()
settings.ValidationType = ValidationType.DTD
Dim inner As XmlReader = XmlReader.Create("book.xml", settings) ' DTD Validation
settings.Schemas.Add("urn:book-schema", "book.xsd")
settings.ValidationType = ValidationType.Schema
Dim outer As XmlReader = XmlReader.Create(inner, settings)  ' XML Schema Validation
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.DTD;
XmlReader inner = XmlReader.Create("book.xml", settings); // DTD Validation
settings.Schemas.Add("urn:book-schema", "book.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader outer = XmlReader.Create(inner, settings);  // XML Schema Validation

См. также

Основные понятия

Чтение XML с помощью XmlReader