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 von externen 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 der standardmäßige 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 XmlResolver-Argument null 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.
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);
Siehe auch
Referenz
Konzepte
Sicherheitsaspekte für "System.Xml"