Разрешение внешних ресурсов

Свойство XmlResolver класса XmlDocument используется классом XmlDocument для поиска ресурсов, не встроенных в XML-данные, таких как внешние определения DTD, сущности и схемы. Эти элементы могут находиться в сети или на локальном диске, и могут быть найдены с помощью URI. Это позволяет классу XmlDocument разрешать имеющиеся в документе узлы EntityReference и проверять документ на соответствие внешнему определению DTD или схеме.

Полностью доверенный XmlDocument

Свойство XmlResolver влияет на функциональность метода XmlDocument.Load. В следующей таблице показано, как работает свойство XmlDocument.XmlResolver, если объект XmlDocument является полностью доверенным. В этой таблице также приводятся методы XmlDocument.Load, которым в качестве входных данных передаются объекты TextReader, String, Stream или URI. Эта таблица не применяется к методу Load, если XmlDocument загружается из XmlReader.

XmlResolver, свойство Function Примечания.
Этому свойству в качестве значения присваивается класс XmlResolver, который уже создан ранее и свойства которого уже заданы пользователем. Класс XmlDocument использует предоставленный класс XmlResolver для разрешения имен файлов и ссылок на внешние ресурсы, например определения DTD, сущности и схемы.

Класс XmlResolver также используется при разрешении внешних ресурсов, которые задействуются при добавлении или изменении узлов в объекте XmlDocument.
Класс XmlResolver, переданный классу XmlDocument, выполняет роль сопоставителя для поиска и разрешения внешних ресурсов.
Это свойство имеет значение NULL (или Nothing в Microsoft Visual Basic .NET). Возможности, которым требуется внешний ресурс, не поддерживаются, например нахождение внешней схемы или определения DTD. Внешние сущности также не будут разрешаться, и такие функции изменения, как вставка узлов сущностей, которые требуют разрешения, не поддерживаются. Класс XmlDocument загружает файлы как анонимные и не пытается разрешать остальные ресурсы.
Свойство не устанавливается, а оставляется в состоянии по умолчанию. При разрешении имен, поиске внешних определений DTD, сущностей и схем объект XmlDocument создает и использует экземпляр класса XmlUrlResolver, устанавливая для его учетных данных значение NULL. Также учетные данные со значениями NULL применяются при изменении узлов.

В следующей таблице показан метод XmlDocument.Load, который принимает в качестве входных данных для Load объект XmlReader, когда XmlDocument является полностью доверенным.

XmlResolver, свойство Function Примечания.
Класс XmlDocument использует тот же класс XmlResolver, что и объект XmlReader. В XmlDocument используется XmlResolver, назначенный ранее для XmlReader.

Вы не можете установить свойство XmlDocument.Resolver вне зависимости от уровня доверия XmlDocument, поскольку оно получает значение XmlResolver из XmlReader. Вы не можете переопределить параметры XmlResolver класса XmlReader, устанавливая свойство XmlResolver для класса XmlDocument.
В качестве XmlReader можно использовать XmlTextReader, XmlValidatingReader или пользовательский модуль чтения данных. Если используемое средство чтения поддерживает разрешение сущностей, внешние сущности разрешаются. Если переданный модуль чтения не поддерживает ссылки на сущности, то ссылки на сущности не разрешаются.

Полудоверенный XmlDocument

В таблице ниже показано, как работает свойство XmlDocument.XmlResolver, если объект является полудоверенным. Эта таблица применима к методам XmlDocument.Load, если входными данными метода Load являются объекты TextReader, String, Stream или URI. Эта таблица не применяется к методу Load, если XmlDocument загружается из XmlReader.

XmlResolver, свойство Function Примечания.
В случае неполного доверия свойству XmlResolver может быть задано только значение NULL. При разрешении имен, поиске внешних определений DTD, сущностей и схем объект XmlDocument создает и использует экземпляр класса XmlUrlResolver, устанавливая для его учетных данных значение NULL. Также учетные данные со значениями NULL применяются при редактировании узлов. Он действует точно так же, если свойство XmlResolver не задано, то есть оставлено в состоянии по умолчанию.

XmlDocument использует для всех действий анонимные разрешения.
Это свойство имеет значение NULL (или Nothing в Microsoft Visual Basic .NET). Функции, которым требуется внешний ресурс, не поддерживаются, например обнаружение внешней схемы или определения DTD. Внешние сущности также не будут разрешаться, а такие действия по изменению, как вставка узлов сущностей, которые требуют разрешения, не поддерживаются. Если это свойство имеет значение NULL, поведение остается неизменным независимо от уровня доверия XmlDocument.
Свойство не устанавливается, а оставляется в состоянии по умолчанию. При разрешении имен, поиске внешних определений DTD, сущностей и схем объект XmlDocument создает и использует экземпляр класса XmlUrlResolver, устанавливая для его учетных данных значение NULL. Также учетные данные со значениями NULL применяются при редактировании узлов. XmlDocument использует для всех действий анонимные разрешения.

Эта таблица применяется к методу XmlDocument.Load, когда входными данными для Load является объект XmlReader, а объект XmlDocument является полудоверенным.

XmlResolver, свойство Function Примечания.
Класс XmlDocument использует тот же класс XmlResolver, что и объект XmlReader. В XmlDocument используется XmlResolver, назначенный ранее для XmlReader.

Вы не можете установить свойство XmlDocument.Resolver вне зависимости от уровня доверия XmlDocument, поскольку оно получает значение XmlResolver из XmlReader. Вы не можете переопределить параметры XmlResolver класса XmlReader, устанавливая свойство XmlResolver для класса XmlDocument.
В качестве XmlReader можно использовать XmlTextReader, проверяющий XmlReader или пользовательский модуль чтения данных. Если используемое средство чтения поддерживает разрешение сущностей, внешние сущности разрешаются. Если переданный модуль чтения не поддерживает ссылки на сущности, ссылки на сущности не разрешаются.

Если настроить класс XmlResolver так, чтобы он содержал корректные учетные данные, можно получить доступ к внешним ресурсам.

Примечание.

Вы не можете получить свойство XmlResolver. Это защищает от повторного использования свойства XmlResolver, для которого уже заданы учетные данные. Кроме того, если объект XmlTextReader или проверяющий объект XmlReader используются для загрузки XmlDocument, и для этого XmlDocument задан сопоставитель, сопоставители из модулей чтения не кэшируются объектом XmlDocument после фазы загрузки (Load), чтобы не создавать угрозы для безопасности.

Дополнительные сведения см. в подразделе "Примечания" на справочной странице XmlResolver.

См. также