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)