XSLT 转换过程中会有几个场合需要解析外部资源。
使用 XmlResolver 类
该 XmlResolver 类用于解析外部资源。 下表描述了在 XSLT 处理过程中 XmlResolver 参与的时机。
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)