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)

Siehe auch