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


Разрешение ресурсов с помощью XmlResolver

Для разрешения внешних DTD, сущностей и схем класс XmlReader использует класс XmlResolver.Класс XmlReader использует XmlUrlResolver; по умолчанию учетные данные пользователя не требуются.Использование XmlResolver указывается путем настройки свойства XmlResolver и передачи объекта XmlReaderSettings методу Create.

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

' 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("https://ServerName/data/books.xml", settings)
// 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("https://ServerName/data/books.xml", settings);
// Create a resolver with default credentials.
XmlUrlResolver^ resolver = gcnew 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( L"https://ServerName/data/books.xml", settings );

Если файл books.xml содержал внешний DTD, класс XmlReader обрабатывает его следующим образом.Чтобы разрешить DTD, класс XmlReader вызывает метод GetEntity для получения потокового представления сущности.Если идентификатор URI данного DTD является относительным, XmlReader вызывает метод ResolveUri и возвращает абсолютное значение URI для данных relativeUri и baseUri.Если XmlUrlResolver не знает, как разрешить данный URI, он возвращает ссылку null.

Метод GetEntity использует эти сведения в свойстве Credentials, если это необходимо для получения доступа к ресурсу.По соображениям безопасности метод доступа get к этому свойству не предусмотрен.При перезаписывании XmlResolverGetEntity является тем методом, который использует эти учетные сведения в свойстве Credentials.

Разрешение всех остальных XML-ресурсов выполняется аналогично разрешению DTD.Арбитр XmlResolver должен только уметь наладить соединение с внешним ресурсом и вернуть представление содержимого в виде потока.Задача истолкования потока возлагается на объект, который осуществляет вызов XmlResolver.

См. также

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

Передача учетных данных для проверки подлинности в XmlResolver при чтении из файла

Доступ к внешним ресурсам из класса XmlReader

Разрешение внешних ресурсов в ходе обработки XSLT

Другие ресурсы

Разрешение внешних XML-ресурсов, именованных посредством URI