XmlResolver クラス

定義

URI (Uniform Resource Identifier) で名前が指定された外部 XML リソースを解決します。

public ref class XmlResolver abstract
public abstract class XmlResolver
type XmlResolver = class
Public MustInherit Class XmlResolver
継承
XmlResolver
派生

次の例では、 XmlUrlResolver 既定の資格情報を使用してを作成します。 は、 XmlReader 結果のデータストリームの読み取りと表示に使用されます。

using System;
using System.Xml;
using System.IO;

class Example
{
    static void Main()
    {
        // Create an XmlUrlResolver with default credentials.
        XmlUrlResolver resolver = new XmlUrlResolver();
        resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;

        // Point the resolver at the desired resource and resolve as a stream.
        Uri baseUri = new Uri("http://serverName/");
        Uri fulluri = resolver.ResolveUri(baseUri, "fileName.xml");
        Stream s = (Stream)resolver.GetEntity(fulluri, null, typeof(Stream));

        // Create the reader with the resolved stream and display the data.
        XmlReader reader = XmlReader.Create(s);
        while (reader.Read())
        {
            Console.WriteLine(reader.ReadOuterXml());
        }
    }
}
Imports System.Xml
Imports System.IO

Module Module1

    Sub Main()
        ' Create an XmlUrlResolver with default credentials.
        Dim resolver As New XmlUrlResolver()
        resolver.Credentials = System.Net.CredentialCache.DefaultCredentials

        ' Point the resolver at the desired resource and resolve as a stream.
        Dim baseUri As New Uri("http://serverName/")
        Dim fulluri As Uri = resolver.ResolveUri(baseUri, "fileName.xml")
        Dim s As Stream = CType(resolver.GetEntity(fulluri, Nothing, GetType(Stream)), Stream)

        ' Create the reader with the resolved stream and display the data.
        Dim reader As XmlReader = XmlReader.Create(s)
        While reader.Read()
            Console.WriteLine(reader.ReadOuterXml())
        End While
    End Sub
End Module

注釈

型は、 XmlResolver エンティティ、ドキュメント型定義 (dtd)、スキーマなどの外部 XML リソースを解決するために使用されます。 また、拡張スタイルシート言語 (XSL) スタイルシートまたは XML スキーマ定義言語 (XSD) スキーマで見つかった include および import 要素を処理するためにも使用されます。

XmlResolver セキュリティ資格情報の処理、データソースへの接続のオープン、ストリームまたはその他のオブジェクト型の形式でのリソースの返却など、リソースへの接続のネゴシエーションのすべての側面を処理します。 を呼び出すオブジェクトには、 XmlResolver ストリームを解釈するタスクがあります。

System.Xml名前空間には、クラスの2つの具象実装が含まれてい XmlResolver ます。

  • XmlUrlResolver は、名前空間のすべてのクラスの既定の競合回避モジュールです System.Xml 。 これは、file:// および http:// プロトコルをサポートし、System.Net.WebRequest クラスからの要求をサポートします。 クラスを拡張してパフォーマンスを向上させる例については、リファレンスページを参照してください XmlUrlResolver

  • XmlSecureResolverXmlResolverオブジェクトをラップし、アクセスできるリソースを制限することで、別のオブジェクトをセキュリティで保護できます。 たとえば、は、 XmlSecureResolver 特定のインターネットサイトまたはゾーンへのアクセスを禁止できます。

独自の競合回避モジュールを作成して指定できます。 競合回避モジュールを指定しない場合、リーダーは既定のを XmlUrlResolver ユーザー資格情報なしで使用します。

XmlResolver プロパティを設定して XmlReaderSettings.XmlResolver オブジェクトを XmlReaderSettings メソッドに渡すことにより、使用する Create を指定します。

リソースが認証を必要とするシステムに格納されている場合は、プロパティを使用して XmlResolver.Credentials 必要な資格情報を指定します。

認証資格情報の指定

読み取る XML データを含むファイルにアクセスポリシーが制限されている可能性があります。 ネットワーク リソースにアクセスするために認証が必要な場合は、Credentials プロパティを使用して必要な資格情報を指定します。 Credentialsプロパティが設定されていない場合、資格情報はに設定され null ます。

たとえば、認証のために web からデータを要求するときに資格情報が必要であるとします。 Web 仮想ディレクトリで匿名アクセスが許可されていない限り、 Credentials 資格情報を提供するようにプロパティを設定する必要があります。 次の例では XmlReaderXmlUrlResolver 既定の資格情報を持つを使用してサイトにアクセスするオブジェクトを作成し http://localhost/bookstore/inventory.xml ます。

// Create a resolver with default credentials.
XmlUrlResolver^ resolver = gcnew XmlUrlResolver;
resolver->Credentials = System::Net::CredentialCache::DefaultCredentials;

 // Set the reader settings object to use the resolver.
 settings->XmlResolver = resolver;

// Create the XmlReader object.
XmlReader^ reader = XmlReader::Create( L"http://ServerName/data/books.xml", settings );
// Create a resolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;

// Set the reader settings object to use the resolver.
settings.XmlResolver = resolver;

// Create the XmlReader object.
XmlReader reader = XmlReader.Create("http://ServerName/data/books.xml", settings);
' Create a resolver with default credentials.
Dim resolver as XmlUrlResolver = new XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials

' Set the reader settings object to use the resolver.
settings.XmlResolver = resolver

' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("http://ServerName/data/books.xml", settings)

Uri ごとに異なる資格情報を指定し、それらをキャッシュに追加することができます。 これらの資格情報は、XML の出所には関係なく、異なる URI について認証をチェックするために使用されます。 次の例は、資格情報をキャッシュに追加する方法を示しています。

// Create the credentials.
NetworkCredential myCred = new NetworkCredential(UserName,SecurelyStoredPassword,Domain);
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred);
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred);

// Set the credentials on the XmlUrlResolver object.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = myCache;

// Compile the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("http://serverName/data/xsl/order.xsl",XsltSettings.Default, resolver);
' Create the credentials.
Dim myCred As NetworkCredential = New NetworkCredential(UserName,SecurelyStoredPassword,Domain)
Dim myCache As CredentialCache = New CredentialCache()
myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred)
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred)

' Set the credentials on the XmlUrlResolver object.
Dim resolver As XmlUrlResolver = New XmlUrlResolver()
resolver.Credentials = myCache

' Compile the style sheet.
Dim xslt As XslCompiledTransform = New XslCompiledTransform()
xslt.Load("http://serverName/data/xsl/order.xsl", XsltSettings.Default, resolver)

セキュリティに関する考慮事項

クラスを使用する場合は、次の点を考慮してください XmlResolver

  • XmlResolver オブジェクトはユーザー資格情報など、重要な情報を含むことがあります。 オブジェクトをキャッシュする際には注意が必要であり、 XmlResolver オブジェクトを信頼できないコンポーネントに渡さないようにしてください XmlResolver

  • XmlResolver クラスを使用したクラス プロパティを設計する場合は、そのプロパティは書き込み専用として定義する必要があります。 使用する XmlResolver を指定するためにそのプロパティを使用できますが、XmlResolver オブジェクトを返すためには使用できません。

  • アプリケーションが信頼されていない XmlResolver コードからオブジェクトを受け入れる場合、メソッドに渡された URI GetEntity が、メソッドによって返される URI と同じであると想定することはできません ResolveUriXmlResolver クラスから派生したクラスは、GetEntity メソッドをオーバーライドすることができ、元の URI に含まれていたデータと異なるデータを返すことができます。

  • アプリケーション GetEntity では、読み取るバイト数を制限するを実装することで、メソッドに対するメモリのサービス拒否の脅威を軽減でき IStream ます。 これにより、悪意のあるコードがメソッドに無制限のバイトストリームを渡そうとした場合に保護でき GetEntity ます。

コンストラクター

XmlResolver()

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

プロパティ

Credentials

派生クラスでオーバーライドされると、Web 要求を認証するために使用する資格情報を設定します。

メソッド

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetEntity(Uri, String, Type)

派生クラスでオーバーライドされると、URI を実際のリソースを格納しているオブジェクトに割り当てます。

GetEntityAsync(Uri, String, Type)

URI を実際のリソースを格納しているオブジェクトに非同期にマップします。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ResolveUri(Uri, String)

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

SupportsType(Uri, Type)

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

ToString()

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

(継承元 Object)

適用対象

こちらもご覧ください