Compartilhar via


Resolvendo recursos externos durante processamento XSLT

Há várias vezes durante uma transformação XSLT quando você precise resolver recursos externos.

Usando a classe de XmlResolver

A classe de XmlResolver é usada para resolver recursos externos. A tabela a seguir descreve quando XmlResolver se torna envolvido durante processamento XSLT.

Tarefa XSLT O que o XmlResolver é usado para
Compile a folha de estilos. Resolver o URI de folha de estilos.

-e-

Resolver referências de URI em todos os elementos de xsl:import ou de xsl:include .
Executar a folha de estilos. Resolver o URI de documento de contexto.

-e-

Resolver referências de URI em todas as funções XSLT document() .

Os métodos de Load e de Transform incluem as sobrecargas que recebem um objeto de XmlResolver como um dos argumentos. Se XmlResolver não for especificado, XmlUrlResolver padrão sem credenciais é usado.

A lista a seguir descreve quando você pode querer especificar um objeto de XmlResolver :

  • Se o processo XSLT precisa acessar um recurso de rede que requer autenticação, você pode usar XmlResolver com as credenciais necessárias.

  • Se você deseja restringir os recursos que o processo XSLT pode acessar, você pode usar XmlSecureResolver com o conjunto de permissões correto. Use a classe de XmlSecureResolver se você precisa abrir um recurso que você não controle, ou que é não confiável.

  • Se você desejar personalizar o comportamento, você pode implementar sua própria classe de XmlResolver e usá-la para resolver recursos.

  • Se você quiser garantir que nenhum recurso externo é acessado, você pode especificar null para o argumento de XmlResolver .

Exemplo

O exemplo a seguir cria uma folha de estilos que é armazenada em um recurso de rede. Um objeto de XmlUrlResolver especifica as credenciais necessárias para acessar a folha de estilos.

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

Confira também