共用方式為


XmlUrlResolver 類別

定義

解析由統一資源識別碼 (URI) 所命名的外部 XML 資源。

public ref class XmlUrlResolver : System::Xml::XmlResolver
public class XmlUrlResolver : System.Xml.XmlResolver
type XmlUrlResolver = class
    inherit XmlResolver
Public Class XmlUrlResolver
Inherits XmlResolver
繼承
XmlUrlResolver

範例

下列範例會建立使用具有預設認證的 XmlUrlResolverXmlReader


// Create an XmlUrlResolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = CredentialCache.DefaultCredentials;

// Create the reader.
XmlReaderSettings settings = new XmlReaderSettings();
settings.XmlResolver = resolver;
XmlReader reader =
     XmlReader.Create("http://serverName/data/books.xml", settings);
' Create an XmlUrlResolver with default credentials.
Dim resolver As New XmlUrlResolver()
resolver.Credentials = CredentialCache.DefaultCredentials

' Create the reader.
Dim settings As New XmlReaderSettings()
settings.XmlResolver = resolver
Dim reader As XmlReader = _
   XmlReader.Create("http://serverName/data/books.xml", settings)

備註

XmlUrlResolver 可用來解析外部 XML 資源,例如實體、文件類型定義 (DTD) 或架構。 它也可用來處理可延伸 StyleSheet 語言 (XSL) 樣式表單或 XML 架構定義語言 (XSD) 架構中找到的包含和匯入專案。

XmlUrlResolverSystem.Xml 命名空間中所有類別的預設解析程式。 它支援來自 WebRequest 類別的 file://http:// 通訊協定和要求。

重要

XmlUrlResolver 物件可以包含敏感性資訊,例如用戶認證。 當您快取 XmlUrlResolver 物件,且不應該將 XmlUrlResolver 對象傳遞至不受信任的元件時,您應該小心。

解析 DTD

如果 XML 讀取器 (XmlReader) 正在讀取包含外部 DTD 的 XML 檔案,它會呼叫 XmlUrlResolver.GetEntityAsync 方法來取得 DTD 的數據流表示法。 如果 DTD 的 URI 是相對 URI,XML 讀取器會呼叫 XmlUrlResolver.ResolveUri 方法,並傳回指定 relativeUribaseURi 參數的絕對 URI。 如果 XmlUrlResolver 不知道如何解析 URI,則會傳回 null

XmlUrlResolver.GetEntity 方法會視需要使用 Credentials 屬性中的資訊來取得資源的存取權。 基於安全性考慮,這個屬性沒有 get 存取子。 覆寫 XmlResolver時,GetEntity 是利用 Credentials 屬性中認證資訊的方法。

解析所有其他 XML 資源與解析 DTD 非常類似。 XmlResolver 會交涉與外部資源的連線,並傳回內容的 Stream 表示法。 對 XmlResolver 進行呼叫的物件會解譯數據流。

擴充 XmlUrlResolver 類別

XmlUrlResolver 類別的預設行為是從其來源解析 XML 數據資源,而不是從快取解析。 在某些情況下,從快取解析數據資源可以藉由儲存數據資源伺服器的行程來改善應用程式的效能。 此處的效能提升必須根據 up-to日期內容的需求來權衡。

下列範例會擴充 XmlUrlResolver,並建置新的類別 XmlCachingResolver,以從快取擷取資源。 這是藉由覆寫 XmlUrlResolver.Credentials 屬性和 XmlUrlResolver.GetEntity 方法來完成。

class XmlCachingResolver : XmlUrlResolver
{
    bool enableHttpCaching;
    ICredentials credentials;

    //resolve resources from cache (if possible) when enableHttpCaching is set to true
    //resolve resources from source when enableHttpcaching is set to false
    public XmlCachingResolver(bool enableHttpCaching)
    {
        this.enableHttpCaching = enableHttpCaching;
    }

    public override ICredentials Credentials
    {
        set
        {
            credentials = value;
            base.Credentials = value;
        }
    }

    public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)
    {
        if (absoluteUri == null)
        {
            throw new ArgumentNullException("absoluteUri");
        }
        //resolve resources from cache (if possible)
        if (absoluteUri.Scheme == "http" && enableHttpCaching && (ofObjectToReturn == null || ofObjectToReturn == typeof(Stream)))
        {
            WebRequest webReq = WebRequest.Create(absoluteUri);
            webReq.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default);
            if (credentials != null)
            {
                webReq.Credentials = credentials;
            }
            WebResponse resp = webReq.GetResponse();
            return resp.GetResponseStream();
        }
        //otherwise use the default behavior of the XmlUrlResolver class (resolve resources from source)
        else
        {
            return base.GetEntity(absoluteUri, role, ofObjectToReturn);
        }
    }
}
Class XmlCachingResolver
    Inherits XmlUrlResolver
    Dim enableHttpCaching As Boolean
    Public Shadows Credentials As ICredentials

    'resolve resources from cache (if possible) when enableHttpCaching is set to true
    'resolve resources from source when enableHttpcaching is set to false
    Public Sub New(ByVal enableHttpCaching As Boolean)
        Me.enableHttpCaching = enableHttpCaching
    End Sub

    Public Shadows Function GetEntity(ByVal absoluteUri As Uri, ByVal role As String, ByVal returnType As Type) As Object
        If absoluteUri = Nothing Then
            Throw New ArgumentNullException("absoluteUri")
        End If

        'resolve resources from cache (if possible)
        If absoluteUri.Scheme = "http" And enableHttpCaching And (returnType Is GetType(Nullable) Or returnType Is GetType(Stream)) Then
            Dim webReq As WebRequest = WebRequest.Create(absoluteUri)
            webReq.CachePolicy = New HttpRequestCachePolicy(HttpRequestCacheLevel.Default)
            If Not (Credentials Is Nothing) Then
                webReq.Credentials = Credentials
            End If
            Dim resp As WebResponse = webReq.GetResponse()
            Return resp.GetResponseStream()
            'otherwise use the default behavior of the XmlUrlResolver class (resolve resources from source)
        Else
            Return MyBase.GetEntity(absoluteUri, role, returnType)
        End If

    End Function
End Class

XmlCachingResolver 類別的快取行為是在 GetEntity 方法中實作。 這是藉由建立新的 WebRequestHttpRequestCachePolicy 物件來完成。 HttpRequestCachePolicy 對像是使用 HttpRequestCacheLevel 列舉的 Default 成員來建立。

WebRequest 物件的 CachePolicy 屬性是使用 HttpRequestCachePolicy 對象來設定。

使用 BooleanenableHttpCaching建立 XmlCachingResolver 類別的實例。 當此值設定為 true時,實例會盡可能從預設快取解析資源。 當 enableHttpCaching 設定為 false時,實例會使用預設行為,並從其來源解析資源。

注意

此範例會利用 .NET Framework 中 XML 類別的擴充性。 您可以擴充和自定義其他類別,以符合特定應用程式的需求。

建構函式

XmlUrlResolver()

初始化 XmlUrlResolver 類別的新實例。

屬性

CachePolicy

取得或設定基礎 WebRequest 物件的快取原則。

Credentials

設定用來驗證 Web 要求的認證。

Proxy

取得或設定基礎 WebRequest 對象的網路 Proxy。

方法

Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetEntity(Uri, String, Type)

將 URI 對應至包含實際資源的物件。

GetEntityAsync(Uri, String, Type)

以異步方式將 URI 對應至包含實際資源的物件。

GetEntityAsync(Uri, String, Type)

以異步方式將 URI 對應至包含實際資源的物件。

(繼承來源 XmlResolver)
GetHashCode()

做為預設哈希函式。

(繼承來源 Object)
GetType()

取得目前實例的 Type

(繼承來源 Object)
MemberwiseClone()

建立目前 Object的淺層複本。

(繼承來源 Object)
ResolveUri(Uri, String)

從基底和相對 URI 解析絕對 URI。

ResolveUri(Uri, String)

在衍生類別中覆寫時,從基底和相對 URI 解析絕對 URI。

(繼承來源 XmlResolver)
SupportsType(Uri, Type)

可讓解析程式傳回 Stream以外的類型。

(繼承來源 XmlResolver)
ToString()

傳回表示目前 物件的字串。

(繼承來源 Object)

適用於

另請參閱