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

範例

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


// 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) 或架構。 它也可用來處理可延伸樣式表單語言 (XSL) 樣式表單或 XML 架構定義語言 (XSD) 架構中找到的專案。

XmlUrlResolver 是命名空間中 System.Xml 所有類別的預設解析程式。 它支援 file://http:// 通訊協定,以及 WebRequest 類別的要求。

重要

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 資料資源。 在某些情況下,解析快取中的資料資源可提高應用程式的效能,因為這樣會節省資料資源伺服器的往來成本。 這裡得到的效能必須針對最新內容的需求來加以考量。

下列範例會 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 物件是使用 Default 列舉的 HttpRequestCacheLevel 成員所建立。

CachePolicy 物件的 WebRequest 屬性是使用 HttpRequestCachePolicy 物件所設定。

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

注意

此範例會利用.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)

適用於

另請參閱