次の方法で共有


XmlUrlResolver クラス

定義

Uniform Resource Identifier (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

次の例では、既定の資格情報で XmlUrlResolver を使用する XmlReader を作成します。


// 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 名前空間内のすべてのクラスの既定のリゾルバーです。 WebRequest クラスからのプロトコルと要求の file://http:// をサポートします。

大事な

XmlUrlResolver オブジェクトには、ユーザー資格情報などの機密情報を含めることができます。 XmlUrlResolver オブジェクトをキャッシュする場合は注意が必要であり、信頼されていないコンポーネント XmlUrlResolver オブジェクトを渡さないでください。

DTD の解決

XML リーダー (XmlReader) が外部 DTD を含む XML ファイルを読み取っている場合は、XmlUrlResolver.GetEntityAsync メソッドを呼び出して DTD のストリーム表現を取得します。 DTD の URI が相対 URI の場合、XML リーダーは XmlUrlResolver.ResolveUri メソッドを呼び出し、指定された relativeUri および baseURi パラメーターの絶対 URI を返します。 XmlUrlResolver が URI を解決する方法を知らない場合は、nullを返します。

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

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

XmlUrlResolver クラスの拡張

XmlUrlResolver クラスの既定の動作は、キャッシュではなく、ソースから XML データ リソースを解決することです。 場合によっては、キャッシュからデータ リソースを解決することで、データ リソースのサーバーへのトリップを保存することで、アプリケーションのパフォーマンスを向上させることができます。 ここでのパフォーマンスの向上は、up-to-date コンテンツの必要性と比較する必要があります。

次の例では、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 メソッドに実装されます。 これを行うには、新しい WebRequest オブジェクトと HttpRequestCachePolicy オブジェクトを作成します。 HttpRequestCachePolicy オブジェクトは、HttpRequestCacheLevel 列挙体の Default メンバーを使用して作成されます。

WebRequest オブジェクトの CachePolicy プロパティは、HttpRequestCachePolicy オブジェクトで設定されます。

XmlCachingResolver クラスのインスタンスは、BooleanenableHttpCachingを使用して作成されます。 この値を trueに設定すると、可能であれば、インスタンスは既定のキャッシュからリソースを解決します。 enableHttpCachingfalseに設定されている場合、インスタンスは既定の動作を使用し、ソースからのリソースを解決します。

手記

この例では、.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)

適用対象

こちらもご覧ください

  • XML ドキュメントとデータ の