XmlUrlResolver クラス

定義

URI (Uniform Resource Identifier) で名前が指定された外部 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 は、エンティティ、ドキュメント型定義 (DTD) やスキーマなどの外部 XML リソースを解決するために使用されます。 また、拡張スタイルシート言語 (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 呼び出し、指定された relativeUri パラメーターと baseURi パラメーターの絶対 URI を返します。 URI を XmlUrlResolver 解決する方法がわからない場合は、返されます null

XmlUrlResolver.GetEntity メソッドでは、必要に応じて Credentials プロパティ内の情報を使用して、リソースにアクセスします。 セキュリティ上の理由から、このプロパティへの get アクセサーはありません。 上書き XmlResolverすると、 GetEntityCredentials プロパティの資格情報を利用するメソッドです。

その他のすべての XML リソースの解決は、DTD の解決に非常に似ています。 XmlResolver は、外部リソースとの接続をネゴシエートし、コンテンツの表現を Stream 返します。 ストリームを解釈する呼び出しを XmlResolver 行っているオブジェクト。

XmlUrlResolver クラスの拡張

XmlUrlResolver の既定の動作では、キャッシュではなくソースから XML データ リソースを解決します。 場合によっては、キャッシュからデータ リソースを解決することでデータ リソース サーバーへのトリップが不要になるため、アプリケーションのパフォーマンスを高めることができます。 このパフォーマンスの向上を重視するか、最新コンテンツの必要性を重視するかを検討する必要があります。

次の例では、キャッシュからリソースを取得するために、XmlCachingResolver新しいクラスを拡張XmlUrlResolverしてビルドします。 そのために、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 メソッドに実装します。 そのために、WebRequest オブジェクトと HttpRequestCachePolicy オブジェクトを新しく作成します。 HttpRequestCachePolicy 列挙体の Default メンバーを使用して、HttpRequestCacheLevel オブジェクトを作成します。

CachePolicy オブジェクトの WebRequest プロパティに HttpRequestCachePolicy オブジェクトを設定します。

クラスのインスタンスはXmlCachingResolverBoolean``enableHttpCaching. この値を true設定すると、可能であれば、インスタンスは既定のキャッシュからリソースを解決します。 にfalse設定するとenableHttpCaching、インスタンスは既定の動作を使用し、ソースからリソースを解決します。

注意

この例では、.NET Frameworkの XML クラスの拡張性を活用します。 他のクラスも、特定のアプリケーションの要件に合わせて拡張し、カスタマイズできます。

コンストラクター

XmlUrlResolver()

XmlUrlResolver クラスの新しいインスタンスを初期化します。

プロパティ

CachePolicy

基になる WebRequest オブジェクトのキャッシュ ポリシーを取得または設定します。

Credentials

Web 要求を認証するために使用する資格情報を設定します。

Proxy

基になる WebRequest オブジェクトのネットワーク プロキシを取得または設定します。

メソッド

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 を解決して絶対 URI を返します。

ResolveUri(Uri, String)

派生クラスでオーバーライドされると、ベース URI および相対 URI から絶対 URI を解決します。

(継承元 XmlResolver)
SupportsType(Uri, Type)

リゾルバーが Stream 以外の型を返せるようにします。

(継承元 XmlResolver)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象

こちらもご覧ください