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


Методы System.Xml.XmlReader.Create

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

Create Большинство перегрузок включают settings параметр, принимаюющий XmlReaderSettings объект. Этот объект можно использовать для:

  • Укажите, какие функции вы хотите поддерживать в объекте XmlReader .
  • Повторно используйте XmlReaderSettings объект для создания нескольких читателей. Вы можете использовать одни и те же параметры для создания нескольких читателей с одной и той же функциональностью. Кроме того, можно изменить параметры экземпляра XmlReaderSettings и создать новое средство чтения с другим набором функций.
  • Добавьте функции в существующий модуль чтения XML. Метод Create может принимать другой XmlReader объект. Базовый XmlReader объект может быть определяемым пользователем средством чтения, XmlTextReader объектом или другим XmlReader экземпляром, в который требуется добавить дополнительные функции.
  • Воспользуйтесь всеми преимуществами таких функций, как проверка соответствия и соответствие рекомендациям XML 1.0 (четвертый выпуск), которые доступны только для XmlReader объектов, созданных статическим Create методом.

Замечание

Хотя .NET включает конкретные реализации XmlReader класса, такие как XmlTextReaderXmlNodeReader, и XmlValidatingReader классы, рекомендуется создавать XmlReader экземпляры с помощью Create метода.

Параметры по умолчанию

Если вы используете перегрузку Create, которая не принимает объект XmlReaderSettings, будут использованы следующие параметры чтения по умолчанию:

Настройки По умолчанию
CheckCharacters true
ConformanceLevel ConformanceLevel.Document
IgnoreComments false
IgnoreProcessingInstructions false
IgnoreWhitespace false
LineNumberOffset 0
LinePositionOffset 0
NameTable null
DtdProcessing Prohibit
Schemas Пустой XmlSchemaSet объект
ValidationFlags ProcessIdentityConstraints Включен
ValidationType None
XmlResolver null

Настройки для распространенных сценариев

Ниже приведены XmlReaderSettings свойства, которые следует задать для некоторых типичных сценариев чтения XML.

Требование Установить
Данные должны быть хорошо сформированным XML-документом. ConformanceLevel изменено на Document.
Данные должны быть корректно сформированными анализируемыми сущностями XML. ConformanceLevel изменено на Fragment.
Данные должны быть проверены на основе DTD. DtdProcessing до Parse
ValidationType изменено на DTD.
Данные должны быть проверены на основе схемы XML. ValidationType до Schema
Schemas к XmlSchemaSet для использования в проверке. Обратите внимание, что XmlReader не поддерживает проверку схемы XML-Data в сокращенном формате (XDR).
Данные должны быть проверены на основе встроенной XML-схемы. ValidationType до Schema
ValidationFlags изменено на ProcessInlineSchema.
Поддержка типов. ValidationType до Schema
Schemas к XmlSchemaSet для использования.

XmlReader не поддерживает проверку схемы XML-Data сокращенной (XDR).

Асинхронное программирование

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

Вопросы безопасности

По умолчанию для открытия ресурсов используется объект XmlReader, не содержащий учетных данных пользователя, XmlUrlResolver. Это означает, что по умолчанию XML-ридер может получить доступ к любому расположению, которое не требует учетных данных. XmlResolver Используйте свойство для управления доступом к ресурсам:

  • Задайте XmlResolver как объект XmlSecureResolver, чтобы ограничить ресурсы, к которым может получить доступ средство чтения XML, или...
  • Установите XmlResolver в null, чтобы предотвратить открытие внешних ресурсов средством чтения XML.

Примеры

В этом примере создается XML ридер, который удаляет незначительные пробелы, удаляет комментарии и выполняет проверку соответствия фрагментов.

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

В следующем примере для доступа к файлу используются учетные данные XmlUrlResolver по умолчанию.

// Set the reader settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
settings.IgnoreProcessingInstructions = true;
settings.IgnoreWhitespace = true;
' Set the reader settings.
Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.IgnoreComments = true
settings.IgnoreProcessingInstructions = true
settings.IgnoreWhitespace = true
// Create a resolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;

// Set the reader settings object to use the resolver.
settings.XmlResolver = resolver;

// Create the XmlReader object.
XmlReader reader = XmlReader.Create("http://ServerName/data/books.xml", settings);
' Create a resolver with default credentials.
Dim resolver as XmlUrlResolver = new XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials

' Set the reader settings object to use the resolver.
settings.XmlResolver = resolver

' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("http://ServerName/data/books.xml", 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 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)

Этот пример связывает читателей с добавлением проверки схем DTD и XML.

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
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