Partager via


Résolution des ressources externes pendant le traitement XSLT

Plusieurs fois au cours d’une transformation XSLT, vous devrez peut-être résoudre les ressources externes.

Utilisation de la classe XmlResolver

La XmlResolver classe est utilisée pour résoudre les ressources externes. Le tableau suivant décrit quand le XmlResolver devient impliqué dans le processus XSLT.

Tâche XSLT Ce que xmlResolver est utilisé pour
Compilez la feuille de style. Résolvez l’URI de la feuille de style.

-et-

Résolvez les références d'URI dans n'importe quel élément xsl:import ou xsl:include.
Exécutez la feuille de style. Résolvez l’URI du document de contexte.

-et-

Résolvez les références d’URI dans toutes les fonctions XSLT document() .

Les méthodes Load et Transform incluent des surcharges qui prennent un objet XmlResolver comme l’un de leurs arguments. Si un(e) XmlResolver n'est pas spécifié(e), un(e) XmlUrlResolver par défaut sans identifiants est utilisé(e).

La liste suivante décrit quand vous souhaiterez peut-être spécifier un XmlResolver objet :

  • Si le processus XSLT doit accéder à une ressource réseau qui nécessite une authentification, vous pouvez utiliser une XmlResolver avec les informations d’identification nécessaires.

  • Si vous souhaitez restreindre les ressources auxquelles le processus XSLT peut accéder, vous pouvez utiliser un jeu d’autorisations XmlSecureResolver approprié. Utilisez la XmlSecureResolver classe si vous devez ouvrir une ressource que vous ne contrôlez pas ou qui n’est pas approuvée.

  • Si vous souhaitez personnaliser le comportement, vous pouvez implémenter votre propre XmlResolver classe et l’utiliser pour résoudre les ressources.

  • Si vous souhaitez vous assurer qu’aucune ressource externe n’est accessible, vous pouvez spécifier null l’argument XmlResolver .

Exemple :

L’exemple suivant compile une feuille de style stockée sur une ressource réseau. Un XmlUrlResolver objet spécifie les informations d’identification nécessaires pour accéder à la feuille de style.

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

Voir aussi