Résolution de ressources externes lors du traitement XSLT
Lors d'une transformation XSLT, il peut s'avérer nécessaire de résoudre des ressources externes à plusieurs moments.
Utilisation de la classe XmlResolver
La classe XmlResolver permet de résoudre des ressources externes. Le tableau suivant décrit l'implication de l'objet XmlResolver dans le traitement XSLT.
Tâche XSLT |
Utilité de XmlResolver |
---|---|
Compilation de la feuille de style |
Résolution de l'URI de la feuille de style -et- Résolution des références URI dans tout élément xsl:import ou xsl:include |
Exécution de la feuille de style |
Résolution de l'URI dans le document de contexte -et- Résolution des références URI dans toute fonction XSLT document() |
Les méthodes Load et Transform comprennent des surcharges qui prennent un objet XmlResolver comme l'un de leurs arguments. Si aucun XmlResolver n'est spécifié, un XmlUrlResolver par défaut sans informations d'identification est utilisé.
La liste suivante décrit les cas dans lesquels vous pouvez préférer spécifier un objet XmlResolver :
Si le traitement XSLT doit accéder à une ressource réseau qui nécessite une authentification, vous pouvez utiliser un objet XmlResolver avec les informations d'identification nécessaires.
Si vous souhaitez limiter les ressources auxquelles le traitement XSLT peut accéder, vous pouvez utiliser un objet XmlSecureResolver avec toutes les autorisations correctes. La classe XmlSecureResolver doit être utilisée si vous devez ouvrir une ressource non contrôlée ou non fiable.
Pour personnaliser le comportement, vous pouvez implémenter votre propre classe XmlResolver et l'utiliser pour résoudre les ressources.
Pour vous assurer qu'aucune ressource externe n'est accessible, vous pouvez spécifier null pour l'argument XmlResolver.
Exemple
L'exemple suivant compile une feuille de style stockée sur une ressource réseau. Un objet XmlUrlResolver spécifie les informations d'identification nécessaires pour accéder à la feuille de style.
' Create the credentials.
Dim myCred As NetworkCredential = New NetworkCredential(UserName,SecurelyStoredPassword,Domain)
Dim myCache As CredentialCache = New CredentialCache()
myCache.Add(new Uri("https://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("https://serverName/data/xsl/order.xsl", XsltSettings.Default, resolver)
// Create the credentials.
NetworkCredential myCred = new NetworkCredential(UserName,SecurelyStoredPassword,Domain);
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri("https://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("https://serverName/data/xsl/order.xsl",XsltSettings.Default, resolver);
Voir aussi
Référence
Concepts
Considérations de sécurité System.Xml