Auflösen von externen Ressourcen während der XSLT-Verarbeitung
Während einer XSLT-Transformation müssen Sie u. U. mehrmals externe Ressourcen auflösen.
Verwenden der XmlResolver-Klasse
Die XmlResolver-Klasse wird zum Auflösen externer Ressourcen verwendet. In der folgenden Tabelle wird dargestellt, wann der XmlResolver während der XSLT-Verarbeitung aktiv wird.
XSLT-Aufgabe | Verwendung von "XmlResolver" |
---|---|
Kompilieren des Stylesheets. | Auflösen des URI des Stylesheets. - und - Auflösen von URI-Verweisen in allen xsl:import -Elementen oder xsl:include -Elementen. |
Ausführen des Stylesheets. | Auflösen des URI des Kontextmenüs. - und - Auflösen von URI-Verweisen in beliebigen Funktionen von XSLT- document() . |
Die Load-Methode und die Transform-Methode enthalten Überladungen, die ein XmlResolver-Objekt als eines ihrer Argumente verwenden. Wenn kein XmlResolver angegeben ist, wird ein Standard-XmlUrlResolver ohne Anmeldeinformationen verwendet.
In der folgenden Liste wird erläutert, wann ein XmlResolver-Objekt angegeben werden kann.
Wenn der XSLT-Vorgang auf eine Netzwerkressource zugreifen muss, die eine Authentifizierung erfordert, können Sie einen XmlResolver mit den notwendigen Anmeldeinformationen verwenden.
Wenn Sie die Ressourcen einschränken möchten, auf die der XSLT-Vorgang zugreifen kann, können Sie einen XmlSecureResolver mit den korrekt festgelegten Einstellungen verwenden. Verwenden Sie die XmlSecureResolver-Klasse, wenn Sie eine Ressource öffnen möchten, die nicht von Ihnen gesteuert wird oder die nicht vertrauenswürdig ist.
Wenn Sie das Verhalten anpassen möchten, können Sie eine eigene XmlResolver-Klasse implementieren und diese zum Auflösen von Ressourcen verwenden.
Wenn Sie sich vergewissern möchten, dass auf keine externe Ressource zugegriffen wird, können Sie für das
null
-Argument XmlResolver angeben.
Beispiel
Im folgenden Beispiel wird ein Stylesheet kompiliert, das in einer Netzwerkressource gespeichert ist. Ein XmlUrlResolver-Objekt gibt die Anmeldeinformationen an, die für den Zugriff auf das Stylesheet erforderlich sind.
// 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)