XmlResolver Класс

Определение

Разрешает внешние XML-ресурсы с именем универсального идентификатора ресурса (URI).

public ref class XmlResolver abstract
public abstract class XmlResolver
type XmlResolver = class
Public MustInherit Class XmlResolver
Наследование
XmlResolver
Производный

Примеры

В следующем примере создается учетные XmlUrlResolver данные по умолчанию. Используется XmlReader для чтения и отображения результирующего потока данных.

using System;
using System.Xml;
using System.IO;

class Example
{
    static void Main()
    {
        // Create an XmlUrlResolver with default credentials.
        XmlUrlResolver resolver = new XmlUrlResolver();
        resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;

        // Point the resolver at the desired resource and resolve as a stream.
        Uri baseUri = new Uri("http://serverName/");
        Uri fulluri = resolver.ResolveUri(baseUri, "fileName.xml");
        Stream s = (Stream)resolver.GetEntity(fulluri, null, typeof(Stream));

        // Create the reader with the resolved stream and display the data.
        XmlReader reader = XmlReader.Create(s);
        while (reader.Read())
        {
            Console.WriteLine(reader.ReadOuterXml());
        }
    }
}
Imports System.Xml
Imports System.IO

Module Module1

    Sub Main()
        ' Create an XmlUrlResolver with default credentials.
        Dim resolver As New XmlUrlResolver()
        resolver.Credentials = System.Net.CredentialCache.DefaultCredentials

        ' Point the resolver at the desired resource and resolve as a stream.
        Dim baseUri As New Uri("http://serverName/")
        Dim fulluri As Uri = resolver.ResolveUri(baseUri, "fileName.xml")
        Dim s As Stream = CType(resolver.GetEntity(fulluri, Nothing, GetType(Stream)), Stream)

        ' Create the reader with the resolved stream and display the data.
        Dim reader As XmlReader = XmlReader.Create(s)
        While reader.Read()
            Console.WriteLine(reader.ReadOuterXml())
        End While
    End Sub
End Module

Комментарии

Тип XmlResolver используется для разрешения внешних XML-ресурсов, таких как сущности, определения типов документов (DTD) или схемы. Он также используется для обработки элементов включения и импорта, найденных в таблицах стилей XSL или схемах языка определения схем XML (XSD).

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

Пространство System.Xml имен включает в себя следующую конкретную реализацию XmlResolver класса:

  • XmlUrlResolver — это резолвер по умолчанию для всех классов в пространстве имен System.Xml. Он поддерживает протоколы file:// и http://, а также запросы из класса System.Net.WebRequest. Примеры расширения класса для повышения производительности см. на справочной XmlUrlResolver странице.

Вы можете создать и указать собственный сопоставитель. Если не указать резолвер, ридер использует XmlUrlResolver по умолчанию без пользовательских учетных данных.

Укажите XmlResolver для использования, устанавливая свойство XmlReaderSettings.XmlResolver и передавая объект XmlReaderSettings методу Create.

Если ресурс хранится в системе, требующей проверки подлинности, используйте XmlResolver.Credentials свойство для указания необходимых учетных данных.

Укажите учетные данные аутентификации

Файл, содержащий XML-данные для чтения, может иметь политику ограниченного доступа. Если для доступа к сетевому ресурсу требуется проверка подлинности, используйте Credentials свойство, чтобы указать необходимые учетные данные. Если свойство Credentials не задано, учетным данным присваивается значение null.

Например, предположим, что учетные данные необходимы при запросе данных из Интернета в целях проверки подлинности. Если веб-виртуальный каталог не разрешает анонимный доступ, необходимо задать Credentials свойство для предоставления учетных данных. В следующем примере создается объект XmlReader, который использует учетные данные XmlUrlResolver по умолчанию для доступа к сайту http://localhost/bookstore/inventory.xml.

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

Вы можете указать разные учетные данные для разных URI и добавить их в кэш. Эти учетные данные используются для проверки подлинности для различных URI независимо от исходного источника XML. В следующем примере показано, как добавить учетные данные в кэш.

// Create the credentials.
NetworkCredential myCred = new NetworkCredential(UserName,SecurelyStoredPassword,Domain);
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred);
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred);

// Set the credentials on the XmlUrlResolver object.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = myCache;

// Compile the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("http://serverName/data/xsl/order.xsl",XsltSettings.Default, resolver);
' Create the credentials.
Dim myCred As NetworkCredential = New NetworkCredential(UserName,SecurelyStoredPassword,Domain)
Dim myCache As CredentialCache = New CredentialCache()
myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred)
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred)

' Set the credentials on the XmlUrlResolver object.
Dim resolver As XmlUrlResolver = New XmlUrlResolver()
resolver.Credentials = myCache

' Compile the style sheet.
Dim xslt As XslCompiledTransform = New XslCompiledTransform()
xslt.Load("http://serverName/data/xsl/order.xsl", XsltSettings.Default, resolver)

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

При работе с классом XmlResolver рассмотрите следующие элементы.

  • XmlResolver объекты могут содержать конфиденциальную информацию, например учетные данные пользователя. При кэшировании XmlResolver объектов следует быть осторожным и не следует передавать XmlResolver объект в ненадежный компонент.

  • Если вы разрабатываете свойство класса, использующее XmlResolver класс, свойство должно быть определено как свойство только для записи. Свойство можно использовать для указания используемого XmlResolver, но его нельзя использовать для возврата объекта XmlResolver.

  • Если приложение принимает XmlResolver объекты из ненадежного кода, нельзя предположить, что URI, переданный в GetEntity метод, будет совпадать с тем, что возвращается методом ResolveUri . Классы, производные от XmlResolver класса, могут переопределить GetEntity метод и возвращать данные, отличные от того, что было в исходном URI.

  • Приложение может снизить угрозы отказа в обслуживании памяти для GetEntity метода, реализуя IStream ограничение количества байтов, считываемых. Это помогает защититься от ситуаций, когда вредоносный код пытается передать бесконечный поток байтов методу GetEntity .

Конструкторы

Имя Описание
XmlResolver()

Инициализирует новый экземпляр класса XmlResolver.

Свойства

Имя Описание
Credentials

При переопределении в производном классе задает учетные данные, используемые для проверки подлинности веб-запросов.

FileSystemResolver

Возвращает сопоставитель XML, разрешающий только URI файловой системы.

ThrowingResolver

Возвращает сопоставитель XML, который запрещает разрешение сущностей.

Методы

Имя Описание
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetEntity(Uri, String, Type)

При переопределении в производном классе сопоставляет универсальный код ресурса (URI) с объектом, содержащим фактический ресурс.

GetEntityAsync(Uri, String, Type)

Асинхронно сопоставляет универсальный код ресурса (URI) с объектом, содержащим фактический ресурс.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ResolveUri(Uri, String)

При переопределении в производном классе разрешает абсолютный URI из базовых и относительных URI.

SupportsType(Uri, Type)

Позволяет сопоставителям возвращать типы, отличные от Stream.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к

См. также раздел