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)