在 XSLT 轉換的過程中,有幾個時機您可能需要解析外部資源。
使用 XmlResolver 類別
類別 XmlResolver 是用來解析外部資源。 下表描述了 XmlResolver 在 XSLT 處理過程中何時參與。
| XSLT 任務 | XmlResolver 的用途 |
|---|---|
| 編譯樣式表單。 | 解析樣式表的URI。 -及- 解析任何 xsl:import 或 xsl:include 元素中的 URI 參考。 |
| 執行樣式表單。 | 解析上下文文件的 URI。 -及- 解析任何 XSLT document() 函式中的 URI 參考。 |
Load和 Transform 方法包含重載,其中以一個XmlResolver物件作為其中一個參數。 XmlResolver如果未指定 ,則會使用沒有認證的預設值XmlUrlResolver。
下列清單說明何時可能想要指定 XmlResolver 物件:
如果 XSLT 行程需要存取需要驗證的網路資源,您可以使用 XmlResolver 並提供必要的認證。
如果您要限制 XSLT 行程可以存取的資源,則可以搭配正確的許可權集合使用 XmlSecureResolver 。 如果您需要開啟不控制的資源,或未受信任的資源,請使用 類別 XmlSecureResolver 。
如果您想要自定義行為,您可以實作自己的 XmlResolver 類別,並用它來解析資源。
如果您要確保不會存取任何外部資源,您可以針對
null自變數指定 XmlResolver 。
範例
下列範例會編譯儲存在網路資源的樣式表單。 XmlUrlResolver物件會指定存取樣式表單所需的認證。
// 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)