Udostępnij za pośrednictwem


Rozpoznawanie zewnętrznych zasobów podczas przetwarzania XSLT

Podczas przekształcania XSLT może wystąpić kilka razy, gdy może być konieczne rozwiązanie problemów z zasobami zewnętrznymi.

Korzystanie z klasy XmlResolver

Klasa służy do rozwiązywania XmlResolver problemów z zasobami zewnętrznymi. W poniższej tabeli opisano, kiedy XmlResolver występuje proces przetwarzania XSLT.

XSLT, zadanie Do czego służy element XmlResolver
Skompiluj arkusz stylów. Rozwiąż identyfikator URI arkusza stylów.

— i —

Rozpoznawanie odwołań identyfikatorów URI w dowolnych xsl:import elementach lub xsl:include .
Wykonaj arkusz stylów. Rozwiąż identyfikator URI dokumentu kontekstowego.

— i —

Rozpoznawanie odwołań identyfikatorów URI w dowolnych funkcjach XSLT document() .

Metody Load i Transform obejmują przeciążenia, które przyjmują XmlResolver obiekt jako jeden z jego argumentów. Jeśli parametr XmlResolver nie zostanie określony, zostanie użyta wartość domyślna XmlUrlResolver bez poświadczeń.

Na poniższej liście opisano, kiedy można określić XmlResolver obiekt:

  • Jeśli proces XSLT musi uzyskać dostęp do zasobu sieciowego wymagającego uwierzytelniania, możesz użyć elementu XmlResolver z wymaganymi poświadczeniami.

  • Jeśli chcesz ograniczyć zasoby, do których może uzyskać dostęp proces XSLT, możesz użyć elementu XmlSecureResolver z poprawnym zestawem uprawnień. XmlSecureResolver Użyj klasy , jeśli musisz otworzyć zasób, którego nie kontrolujesz lub który jest niezaufany.

  • Jeśli chcesz dostosować zachowanie, możesz zaimplementować własną XmlResolver klasę i użyć jej do rozwiązywania problemów z zasobami.

  • Jeśli chcesz mieć pewność, że nie masz dostępu do żadnych zasobów zewnętrznych, możesz określić null argument XmlResolver .

Przykład

Poniższy przykład kompiluje arkusz stylów przechowywany w zasobie sieciowym. Obiekt XmlUrlResolver określa poświadczenia niezbędne do uzyskania dostępu do arkusza stylów.

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

Zobacz też