XmlResolver 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
解析由统一资源标识符(URI)命名的外部 XML 资源。
public ref class XmlResolver abstract
public abstract class XmlResolver
type XmlResolver = class
Public MustInherit Class XmlResolver
- 继承
-
XmlResolver
- 派生
示例
以下示例创建具有 XmlUrlResolver 默认凭据的凭据。 A XmlReader 用于读取和显示生成的数据流。
using System;
using System.Xml;
using System.IO;
class Example
{
static void Main()
{
// Create an XmlUrlResolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Point the resolver at the desired resource and resolve as a stream.
Uri baseUri = new Uri("http://serverName/");
Uri fulluri = resolver.ResolveUri(baseUri, "fileName.xml");
Stream s = (Stream)resolver.GetEntity(fulluri, null, typeof(Stream));
// Create the reader with the resolved stream and display the data.
XmlReader reader = XmlReader.Create(s);
while (reader.Read())
{
Console.WriteLine(reader.ReadOuterXml());
}
}
}
Imports System.Xml
Imports System.IO
Module Module1
Sub Main()
' Create an XmlUrlResolver with default credentials.
Dim resolver As New XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
' Point the resolver at the desired resource and resolve as a stream.
Dim baseUri As New Uri("http://serverName/")
Dim fulluri As Uri = resolver.ResolveUri(baseUri, "fileName.xml")
Dim s As Stream = CType(resolver.GetEntity(fulluri, Nothing, GetType(Stream)), Stream)
' Create the reader with the resolved stream and display the data.
Dim reader As XmlReader = XmlReader.Create(s)
While reader.Read()
Console.WriteLine(reader.ReadOuterXml())
End While
End Sub
End Module
注解
该 XmlResolver 类型用于解析外部 XML 资源,例如实体、文档类型定义(DTD)或架构。 它还用于处理在可扩展样式表语言(XSL)样式表或 XML 架构定义语言(XSD)架构中找到的包含和导入元素。
XmlResolver 处理与资源的连接协商的各个方面,包括处理安全凭据、打开与数据源的连接,以及以流或其他对象类型的形式返回资源。 调用 XmlResolver 的对象具有解释流的任务。
命名空间 System.Xml 包括类的 XmlResolver 以下具体实现:
-
XmlUrlResolver 是命名空间中 System.Xml 所有类的默认解析程序。 它支持
file://和http://协议,并支持来自 System.Net.WebRequest 类的请求。 有关扩展类以提高性能的示例,请参阅 XmlUrlResolver 参考页。
可以创建和指定自己的解析程序。 如果未指定解析程序,则读取器使用默认值 XmlUrlResolver ,无需用户凭据。
通过设置 XmlResolver 属性并将 XmlReaderSettings.XmlResolver 对象传递给 XmlReaderSettings 方法,可以指定要使用的 Create。
如果资源存储在需要身份验证的系统上,请使用 XmlResolver.Credentials 该属性指定必要的凭据。
提供身份验证凭据
包含要读取的 XML 数据的文件可能具有受限的访问策略。 如果需要身份验证才能访问网络资源,请使用 Credentials 该属性指定必要的凭据。 如果未设置该 Credentials 属性,则凭据设置为 null。
例如,假设从 Web 请求数据以进行身份验证时需要凭据。 除非 Web 虚拟目录允许匿名访问,否则必须设置该 Credentials 属性以提供凭据。 以下示例创建一个 XmlReader 对象,该对象使用 XmlUrlResolver 默认凭据访问 http://localhost/bookstore/inventory.xml 站点。
// Create a resolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Set the reader settings object to use the resolver.
settings.XmlResolver = resolver;
// Create the XmlReader object.
XmlReader reader = XmlReader.Create("http://ServerName/data/books.xml", settings);
' Create a resolver with default credentials.
Dim resolver as XmlUrlResolver = new XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
' Set the reader settings object to use the resolver.
settings.XmlResolver = resolver
' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("http://ServerName/data/books.xml", settings)
可以为不同的 URI 提供不同的凭据,并将其添加到缓存。 这些凭据用于验证不同 URI 的身份,无论 XML 的原始来源如何。 以下示例演示如何向缓存添加凭据。
// 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)
安全注意事项
使用 XmlResolver 类时,请考虑以下项。
XmlResolver 对象可以包含敏感信息,例如用户凭据。 缓存 XmlResolver 对象时应小心,不应将 XmlResolver 对象传递给不受信任的组件。
如果要设计使用该类的 XmlResolver 类属性,则应将该属性定义为仅写属性。 该属性可用于指定 XmlResolver 要使用的属性,但不能用于返回对象 XmlResolver 。
如果应用程序接受 XmlResolver 来自不受信任的代码的对象,则不能假定传入方法的 GetEntity URI 与该方法返回 ResolveUri 的 URI 相同。 派生自该类的 XmlResolver 类可以重写 GetEntity 该方法并返回与原始 URI 中包含的不同数据。
您的应用程序可以通过实现GetEntity,限制读取的字节数,从而缓解对IStream方法的内存拒绝服务威胁。 这有助于防范恶意代码尝试将无限字节流传递给 GetEntity 方法的情况。
构造函数
| 名称 | 说明 |
|---|---|
| XmlResolver() |
初始化 XmlResolver 类的新实例。 |
属性
| 名称 | 说明 |
|---|---|
| Credentials |
在派生类中重写时,设置用于对 Web 请求进行身份验证的凭据。 |
| FileSystemResolver |
获取仅解析文件系统 URI 的 XML 解析程序。 |
| ThrowingResolver |
获取禁止实体解析的 XML 解析程序。 |
方法
| 名称 | 说明 |
|---|---|
| Equals(Object) |
确定指定的对象是否等于当前对象。 (继承自 Object) |
| GetEntity(Uri, String, Type) |
在派生类中重写时,将 URI 映射到包含实际资源的对象。 |
| GetEntityAsync(Uri, String, Type) |
将 URI 异步映射到包含实际资源的对象。 |
| GetHashCode() |
用作默认哈希函数。 (继承自 Object) |
| GetType() |
获取当前实例的 Type。 (继承自 Object) |
| MemberwiseClone() |
创建当前 Object的浅表副本。 (继承自 Object) |
| ResolveUri(Uri, String) |
在派生类中重写时,从基 URI 和相对 URI 解析绝对 URI。 |
| SupportsType(Uri, Type) |
使解析程序能够返回其他 Stream类型。 |
| ToString() |
返回一个表示当前对象的字符串。 (继承自 Object) |