Lösa externa resurser under XSLT-bearbetning
Det finns flera gånger under en XSLT-transformering när du kan behöva lösa externa resurser.
Använda XmlResolver-klassen
Klassen XmlResolver används för att lösa externa resurser. I följande tabell beskrivs när blir XmlResolver involverad under XSLT-bearbetning.
XSLT-uppgift | Vad XmlResolver används för |
---|---|
Kompilera formatmallen. | Lös URI:n för formatmallen. -och- Lös URI-referenser i valfritt xsl:import eller xsl:include element. |
Kör formatmallen. | Lös URI:n för kontextdokumentet. -och- Lös URI-referenser i alla XSLT-funktioner document() . |
Metoderna Load och Transform innehåller överlagringar som tar ett XmlResolver objekt som ett av argumenten. Om en XmlResolver inte har angetts används ett standardvärde XmlUrlResolver utan autentiseringsuppgifter.
I följande lista beskrivs när du kanske vill ange ett XmlResolver objekt:
Om XSLT-processen behöver åtkomst till en nätverksresurs som kräver autentisering kan du använda en XmlResolver med nödvändiga autentiseringsuppgifter.
Om du vill begränsa de resurser som XSLT-processen kan komma åt kan du använda en XmlSecureResolver med rätt behörighetsuppsättning. XmlSecureResolver Använd klassen om du behöver öppna en resurs som du inte kontrollerar eller som inte är betrodd.
Om du vill anpassa beteendet kan du implementera din egen XmlResolver klass och använda den för att lösa resurser.
Om du vill se till att inga externa resurser används kan du ange
null
för XmlResolver argumentet.
Exempel
I följande exempel kompileras en formatmall som lagras på en nätverksresurs. Ett XmlUrlResolver objekt anger de autentiseringsuppgifter som krävs för att få åtkomst till formatmallen.
// 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)