System.Xml.XmlResolver 类

方法描述

解析由统一资源标识符 (URI) 命名的外部 XML 资源。

语法定义(C# System.Xml.XmlResolver 类 的用法)

public abstract class XmlResolver

构造函数

构造函数名称 构造函数描述
XmlResolver 初始化 XmlResolver 类的新实例。

成员/方法

方法名称 方法描述
Equals(Object) 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
GetEntity 当在派生类中被重写时,将 URI 映射到包含实际资源的对象。
GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)
GetType 获取当前实例的 Type。 (继承自 Object。)
MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
ResolveUri 当在派生类中被重写时,从基 URI 和相对 URI 解析绝对 URI。
SupportsType 此方法使解析程序能够返回其他类型,而不只是 Stream。
ToString 返回表示当前对象的字符串。 (继承自 Object。)

提示和注释

XmlResolver 用于解析外部 XML 资源,如实体、文档类型定义 (DTD) 或架构。 它还用于处理在可扩展样式表语言 (XSL) 样式表或 XML 架构定义语言 (XSD) 架构中可以找到的包含元素和导入元素。

XmlUrlResolver 是 XmlResolver 的具体实现,是 System.Xml 命名空间中所有类的默认冲突解决程序。 您还可以创建自己的冲突解决程序。

安全注意事项

使用 XmlResolver 类时,请考虑以下几项内容。

XmlResolver 对象可能包含敏感信息,如用户凭据。 缓存 XmlResolver 对象时应小心,不要将 XmlResolver 对象传递给不受信任的组件。

如果要设计使用 XmlResolver 类的类属性,则应将该属性定义为只读属性。 该属性可用于指定要使用的 XmlResolver,但不能用于返回 XmlResolver 对象。

如果应用程序接受了来自不受信任的代码的 XmlResolver 对象,则不能假设传递到 GetEntity 方法中的 URI 将与 ResolveUri 方法返回的 URI 相同。 从 XmlResolver 类派生的类可以重写 GetEntity 方法,并返回与原始 URI 中所包含数据不同的数据。

您的应用程序通过实现一个包装的已实现 IStream 来限制字节读取数,可减轻对 GetEntity 方法的内存拒绝服务威胁。 这有助于防止出现恶意代码尝试向 GetEntity 方法传递无限字节流的情况。

System.Xml.XmlResolver 类例子

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());
        }
    }
}

继承层次结构

System.Object

System.Xml.XmlResolver

System.Xml.Resolvers.XmlPreloadedResolver

System.Xml.XmlSecureResolver

System.Xml.XmlUrlResolver

命名空间

namespace: System.Xml

程序集: System.Xml(在 System.Xml.dll 中)

线程安全

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。