Ler em inglês

Partilhar via


XmlUrlResolver Classe

Definição

Resolve recursos XML externos nomeados por um URI (Uniform Resource Identifier).

C#
public class XmlUrlResolver : System.Xml.XmlResolver
Herança
XmlUrlResolver

Exemplos

O exemplo a seguir cria um XmlReader que usa um XmlUrlResolver com credenciais padrão.

C#

// Create an XmlUrlResolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = CredentialCache.DefaultCredentials;

// Create the reader.
XmlReaderSettings settings = new XmlReaderSettings();
settings.XmlResolver = resolver;
XmlReader reader =
     XmlReader.Create("http://serverName/data/books.xml", settings);

Comentários

XmlUrlResolver é usado para resolver recursos XML externos, como entidades, DTDs (definições de tipo de documento) ou esquemas. Ele também é usado para processar elementos de inclusão e importação encontrados em folhas de estilo XSL (Extensible StyleSheet Language) ou esquemas XSD (linguagem de definição de esquema XML).

XmlUrlResolver é o resolvedor padrão para todas as classes no namespace System.Xml. Ele dá suporte aos protocolos file:// e http:// e solicitações da classe WebRequest.

Importante

XmlUrlResolver objetos podem conter informações confidenciais, como credenciais de usuário. Você deve ter cuidado ao armazenar em cache XmlUrlResolver objetos e não deve passar XmlUrlResolver objetos para um componente não confiável.

Resolvendo DTDs

Se um leitor XML (XmlReader) estiver lendo um arquivo XML que contém um DTD externo, ele chamará o método XmlUrlResolver.GetEntityAsync para obter uma representação de fluxo do DTD. Se o URI do DTD for um URI relativo, o leitor XML chamará o método XmlUrlResolver.ResolveUri e retornará um URI absoluto para os parâmetros relativeUri e baseURi fornecidos. Se o XmlUrlResolver não souber como resolver o URI, ele retornará null.

O método XmlUrlResolver.GetEntity usa as informações na propriedade Credentials conforme apropriado para obter acesso ao recurso. Não há nenhum acessador get para essa propriedade por motivos de segurança. Ao substituir , GetEntity é o método que utiliza as informações de credencial na propriedade credenciais do .

Resolver todos os outros recursos XML é muito semelhante à resolução de DTDs. XmlResolver negocia a conexão com o recurso externo e retorna uma representação Stream do conteúdo. O objeto que está fazendo a chamada para XmlResolver interpreta o fluxo.

Estendendo a classe XmlUrlResolver

O comportamento padrão da classe XmlUrlResolver é resolver um recurso de dados XML de sua origem, não do cache. Em alguns casos, resolver um recurso de dados do cache pode melhorar o desempenho de um aplicativo salvando uma viagem ao servidor do recurso de dados. Os ganhos de desempenho aqui devem ser ponderados em relação à necessidade de conteúdo de data up-to.

O exemplo a seguir estende XmlUrlResolver e cria uma nova classe, XmlCachingResolver, para recuperar recursos do cache. Isso é feito substituindo a propriedade XmlUrlResolver.Credentials e o método XmlUrlResolver.GetEntity.

C#
class XmlCachingResolver : XmlUrlResolver
{
    bool enableHttpCaching;
    ICredentials credentials;

    //resolve resources from cache (if possible) when enableHttpCaching is set to true
    //resolve resources from source when enableHttpcaching is set to false
    public XmlCachingResolver(bool enableHttpCaching)
    {
        this.enableHttpCaching = enableHttpCaching;
    }

    public override ICredentials Credentials
    {
        set
        {
            credentials = value;
            base.Credentials = value;
        }
    }

    public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)
    {
        if (absoluteUri == null)
        {
            throw new ArgumentNullException("absoluteUri");
        }
        //resolve resources from cache (if possible)
        if (absoluteUri.Scheme == "http" && enableHttpCaching && (ofObjectToReturn == null || ofObjectToReturn == typeof(Stream)))
        {
            WebRequest webReq = WebRequest.Create(absoluteUri);
            webReq.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default);
            if (credentials != null)
            {
                webReq.Credentials = credentials;
            }
            WebResponse resp = webReq.GetResponse();
            return resp.GetResponseStream();
        }
        //otherwise use the default behavior of the XmlUrlResolver class (resolve resources from source)
        else
        {
            return base.GetEntity(absoluteUri, role, ofObjectToReturn);
        }
    }
}

O comportamento de cache da classe XmlCachingResolver é implementado no método GetEntity. Isso é feito criando novos objetos WebRequest e HttpRequestCachePolicy. O objeto HttpRequestCachePolicy é criado usando o membro Default da enumeração HttpRequestCacheLevel.

A propriedade CachePolicy do objeto WebRequest é definida com o objeto HttpRequestCachePolicy.

Uma instância da classe XmlCachingResolver é criada com o BooleanenableHttpCaching. Quando esse valor é definido como true, a instância resolve um recurso do cache padrão, se possível. Quando enableHttpCaching é definido como false, a instância usa o comportamento padrão e resolve recursos de sua origem.

Nota

Este exemplo aproveita a extensibilidade das classes XML no .NET Framework. Outras classes podem ser estendidas e personalizadas para atender às necessidades de um aplicativo específico.

Construtores

XmlUrlResolver()

Inicializa uma nova instância da classe XmlUrlResolver.

Propriedades

CachePolicy

Obtém ou define a política de cache para o objeto WebRequest subjacente.

Credentials

Define as credenciais usadas para autenticar solicitações da Web.

Proxy

Obtém ou define o proxy de rede para o objeto WebRequest subjacente.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetEntity(Uri, String, Type)

Mapeia um URI para um objeto que contém o recurso real.

GetEntityAsync(Uri, String, Type)

Mapeia de forma assíncrona um URI para um objeto que contém o recurso real.

GetEntityAsync(Uri, String, Type)

Mapeia de forma assíncrona um URI para um objeto que contém o recurso real.

(Herdado de XmlResolver)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ResolveUri(Uri, String)

Resolve o URI absoluto das URIs base e relativas.

ResolveUri(Uri, String)

Quando substituído em uma classe derivada, resolve o URI absoluto das URIs base e relativas.

(Herdado de XmlResolver)
SupportsType(Uri, Type)

Permite que o resolvedor retorne tipos diferentes de Stream.

(Herdado de XmlResolver)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Produto Versões
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Confira também