XmlUrlResolver クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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 を使用する 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
アクセサーはありません。
他のすべての 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
クラスのインスタンスは、Boolean
enableHttpCaching
を使用して作成されます。 この値を true
に設定すると、可能であれば、インスタンスは既定のキャッシュからリソースを解決します。
enableHttpCaching
が false
に設定されている場合、インスタンスは既定の動作を使用し、ソースからのリソースを解決します。
手記
この例では、.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 ドキュメントとデータ の
.NET