在 XSLT 处理期间解析外部资源

XSLT 转换过程中会有几个场合需要解析外部资源。

使用 XmlResolver 类

XmlResolver 类用于解析外部资源。 下表说明在 XSLT 处理期间 XmlResolver 参与的时间。

XSLT 任务

XmlResolver 的用途

编译样式表。

解析样式表的 URI。

- 和 -

解析任何 xsl:import 或 xsl:include 元素中的 URI 引用。

执行样式表。

解析上下文文档的 URI。

- 和 -

解析任何 XSLT document() 函数中的 URI 引用。

LoadTransform 方法包括使用 XmlResolver 对象作为一个参数的重载。 如果未指定 XmlResolver,将使用没有用户凭据的默认 XmlUrlResolver

下表说明可能需要指定 XmlResolver 对象的情况:

  • 如果 XSLT 进程需要访问要求进行身份验证的网络资源,可以使用具有必要的凭据的 XmlResolver

  • 如果要限制 XSLT 进程可以访问的资源,可以使用具有正确权限集的 XmlSecureResolver。 如果需要打开自己无法控制的或不可信的资源,请使用 XmlSecureResolver 类。

  • 如果要自定义行为,可以实现自己的 XmlResolver 类并使用该类解析资源。

  • 如果要确保不访问任何外部资源,可以为 XmlResolver 参数指定 null。

示例

以下示例编译存储在网络资源上的样式表。 XmlUrlResolver 对象指定访问该样式表所需的凭据。

' Create the credentials.
Dim myCred As NetworkCredential = New NetworkCredential(UserName,SecurelyStoredPassword,Domain)
Dim myCache As CredentialCache = New CredentialCache()
myCache.Add(new Uri("https://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("https://serverName/data/xsl/order.xsl", XsltSettings.Default, resolver)

// Create the credentials.
NetworkCredential myCred = new NetworkCredential(UserName,SecurelyStoredPassword,Domain); 
CredentialCache myCache = new CredentialCache(); 
myCache.Add(new Uri("https://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("https://serverName/data/xsl/order.xsl",XsltSettings.Default, resolver);   

请参见

参考

XslCompiledTransform

XsltSettings

概念

System.Xml 安全注意事项

其他资源

XSLT 转换