Partilhar via


Resolvendo recursos externos durante o processamento XSLT

Há várias vezes durante uma transformação XSLT em que você pode precisar resolver recursos externos.

Usando a classe XmlResolver

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

Tarefa XSLT Para que o XmlResolver é usado
Compile a folha de estilos. Resolva o URI da folha de estilos.

- e -

Resolva referências de URI em qualquer xsl:import um ou xsl:include elementos.
Execute a folha de estilos. Resolva o URI do documento de contexto.

- e -

Resolva referências de URI em qualquer função XSLT document() .

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

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

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

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

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

  • Se quiser garantir que nenhum recurso externo seja acessado, especifique null o XmlResolver argumento.

Exemplo

O exemplo a seguir compila uma folha de estilos armazenada em um recurso de rede. Um XmlUrlResolver objeto 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)

Consulte também