XmlResolver を使用したリソースの解決
XmlValidatingReader クラスは、XmlResolver を使用して、外部の DTD、エンティティ、およびスキーマを解決します。これらの外部リソースを解決するには、XmlValidatingReader で XmlResolver プロパティを設定する必要があります。XmlValidatingReader によって使用される外部 DTD リソースを解決するためにリゾルバを設定する方法を次の例に示します。
dim vreader as New
XmlValidatingReader("http://www.alpineskihouse.org/abc.xml")
dim resolver As new XmlUrlResolver()
vreader.XmlResolver = resolver
while vreader.Read
. . .
End While
[C#]
XmlValidatingReader vreader =
newXmlValidatingReader("http://www.alpineskihouse.org/abc.xml");
vreader.XmlResolver = new XmlUrlResolver();
while(Reader.read())
{
. . .
}
DTD を解決するために、XmlValidatingReader は GetEntity メソッドを呼び出してエンティティのストリーム表現を取得します。DTD の URI が相対 URI である場合、XmlValidatingReader は ResolveUri メソッドを呼び出して、指定された relativeUri
と baseUri
に対応する絶対 URI を返します。XmlResolver は、指定された URI の解決方法がわからない場合には null
参照を返します。
さらに、外部ソリースにアクセスするためにセキュリティ設定が必要である場合は、それに応じて Credentials プロパティを設定できます。Credentials プロパティは ICredentials インターフェイスを実装します。このプロパティを使用して、URI の認証設定を指定できます。資格情報の提供方法については、「ファイルからの読み取り時の XmlResolver への資格情報の提供」を参照してください。
XmlUrlResolver の GetEntity メソッドは、リソースへのアクセス権を取得するために、Credentials プロパティ内にある必要な情報を使用します。セキュリティ上の理由から、このプロパティへの get
アクセサはありません。XmlResolver を上書きする場合は、Credentials プロパティ内の資格情報を利用するメソッドは GetEntity です。
XmlValidatingReader に XmlResolver を指定しない場合は、既定の XmlUrlResolver が作成され、null の資格情報が使用されます。
その他のすべての XML リソースの解決も、DTD の解決とほとんど同じです。XmlResolver は、外部リソースとの接続のネゴシエーション方法だけを認識していればよく、内容のストリーム表現を返します。ストリームを解釈するタスクを実行するのは、XmlResolver の呼び出しを行うオブジェクトです。
参照
URI 名を持つ外部 XML リソースの解決 | ファイルからの読み取り時の XmlResolver への資格情報の提供 | カスタム リゾルバの作成