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)