使用 XmlResolver 解析资源

XmlReader 类使用 XmlResolver 来解析外部 DTD、实体和架构。XmlReader 类默认使用不带用户凭据的 XmlUrlResolver。通过设置 XmlResolver 属性并将 XmlReaderSettings 对象传递给 Create 方法,可以指定要使用的 XmlResolver

下面的代码创建一个 XmlReader 实例,该实例使用具有默认凭据的 XmlUrlResolver

' 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("https://ServerName/data/books.xml", settings)
// 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("https://ServerName/data/books.xml", settings);
// Create a resolver with default credentials.
XmlUrlResolver^ resolver = gcnew 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( L"https://ServerName/data/books.xml", settings );

如果 books.xml 文件包含外部 DTD,则 XmlReader 将按以下方式处理该外部 DTD。为解析 DTD,XmlReader 将调用 GetEntity 方法以获取实体的流表示形式。如果 DTD 的 URI 是相对 URI,则 XmlReader 将调用 ResolveUri 方法并返回给定 relativeUri 和 baseUri 的绝对 URI。如果 XmlUrlResolver 不知道如何解析给定的 URI,它将返回 null 引用。

GetEntity 方法使用 Credentials 属性中的适当信息以访问资源。出于安全考虑,没有针对此属性的 get 访问器。在重写 XmlResolver 时,GetEntity 方法利用 Credentials 属性中的凭据信息。

解析所有其他 XML 资源与解析 DTD 非常类似。XmlResolver 只需要知道如何与外部资源协商连接并返回内容的流表示形式。解释流的任务由调用 XmlResolver 的对象负责。

请参见

概念

从文件读取时向 XmlResolver 提供身份验证凭据

为 XmlReader 访问外部资源

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

其他资源

解析由 URI 命名的外部 XML 资源