XmlResolver Classe

Definição

Resolve recursos XML externos nomeados por um Identificador Uniforme de Recursos (URI).

public ref class XmlResolver abstract
public abstract class XmlResolver
type XmlResolver = class
Public MustInherit Class XmlResolver
Herança
XmlResolver
Derivado

Exemplos

O exemplo seguinte cria um XmlUrlResolver com credenciais por defeito. A XmlReader é usado para ler e exibir o fluxo de dados resultante.

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

Observações

O XmlResolver tipo é usado para resolver recursos XML externos, como entidades, definições de tipo de documento (DTDs) ou esquemas. Ele também é usado para processar, incluir e importar elementos encontrados em folhas de estilo XSL (Extensible Stylesheet Language) ou esquemas XSD (XML Schema Definition Language).

XmlResolver Lida com todos os aspetos da negociação da conexão com os recursos, incluindo a manipulação de credenciais de segurança, a abertura da conexão com a fonte de dados e o retorno do recurso na forma de um fluxo ou outro tipo de objeto. O objeto que chama XmlResolver tem a tarefa de interpretar o fluxo.

O System.Xml espaço de nomes inclui a seguinte implementação concreta da XmlResolver classe:

  • XmlUrlResolver é o resolvedor padrão para todas as classes no System.Xml namespace. Ele suporta os file:// protocolos e http:// solicitações da System.Net.WebRequest classe. Para obter exemplos de extensão da classe para melhorar o desempenho, consulte a página de XmlUrlResolver referência.

Você pode criar e especificar seu próprio resolvedor. Se você não especificar um resolvedor, o leitor usará um padrão XmlUrlResolver sem credenciais de usuário.

Você especifica o XmlResolver a ser usado definindo a XmlReaderSettings.XmlResolver propriedade e passando o XmlReaderSettings objeto para o Create método.

Se o recurso estiver armazenado em um sistema que requer autenticação, use a XmlResolver.Credentials propriedade para especificar as credenciais necessárias.

Fornecer credenciais de autenticação

O arquivo que contém os dados XML para ler pode ter uma política de acesso restrito. Se a autenticação for necessária para acessar um recurso de rede, use a Credentials propriedade para especificar as credenciais necessárias. Se a propriedade não estiver definida, as Credentials credenciais serão definidas como null.

Por exemplo, suponha que as credenciais são necessárias ao solicitar dados da Web para fins de autenticação. A menos que o diretório virtual da Web permita acesso anônimo, você deve definir a Credentials propriedade para fornecer credenciais. O exemplo a seguir cria um XmlReader objeto que usa um XmlUrlResolver com credenciais padrão para acessar o http://localhost/bookstore/inventory.xml site.

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

Você pode fornecer credenciais diferentes para URIs diferentes e adicioná-las a um cache. Essas credenciais são usadas para verificar a autenticação para os diferentes URIs, independentemente da fonte original do XML. O exemplo a seguir mostra como adicionar credenciais a um cache.

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

Considerações de segurança

Considere os seguintes itens ao trabalhar com a XmlResolver classe.

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

  • Se estiver a criar uma propriedade de classe que usa a XmlResolver classe, a propriedade deve ser definida como uma propriedade apenas de escrita. A propriedade pode ser usada para especificar o XmlResolver a ser usado, mas não pode ser usada para retornar um XmlResolver objeto.

  • Se seu aplicativo aceita XmlResolver objetos de código não confiável, você não pode assumir que o URI passado para o GetEntity método será o mesmo que o retornado pelo ResolveUri método. As classes derivadas da XmlResolver classe podem substituir o GetEntity método e retornar dados diferentes do que estava contido no URI original.

  • Seu aplicativo pode mitigar ameaças de negação de serviço devido ao uso excessivo de memória ao método GetEntity ao implementar um IStream que limita o número de bytes lidos. Isso ajuda a proteger contra situações em que códigos mal-intencionados tentam passar um fluxo infinito de bytes para o GetEntity método.

Construtores

Name Descrição
XmlResolver()

Inicializa uma nova instância da XmlResolver classe.

Propriedades

Name Descrição
Credentials

Quando sobreposto numa classe derivada, define as credenciais usadas para autenticar pedidos web.

FileSystemResolver

Obtém um resolvedor XML que resolve apenas URIs do sistema de ficheiros.

ThrowingResolver

Obtém um resolvedor XML que proíbe a resolução de entidades.

Métodos

Name Descrição
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

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

Quando sobreposto numa classe derivada, mapeia um URI para um objeto que contém o recurso real.

GetEntityAsync(Uri, String, Type)

Mapeia assíncronamente um URI para um objeto que contenha o recurso real.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ResolveUri(Uri, String)

Quando sobrescrito numa classe derivada, resolve o URI absoluto a partir dos URIs base e relativo.

SupportsType(Uri, Type)

Permite que o resolvedor devolva tipos diferentes de Stream.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Ver também