外部の DTD、エンティティ、スキーマなど、XML データのインラインでないリソースを検索するには、XmlDocument クラスの XmlResolver プロパティを使用します。これらのアイテムは、ネットワーク上やローカル ドライブ上にあり、URI で識別できます。そのため、XmlDocument はドキュメント内の EntityReference ノードを解決でき、外部の DTD またはスキーマに基づいてドキュメントを検証できます。
完全に信頼されている XmlDocument
XmlResolver プロパティは、XmlDocument.Load メソッドの機能に影響を与えることがあります。XmlDocument オブジェクトが完全に信頼されている場合の XmlDocument.XmlResolver プロパティの動作を次の表に示します。Load への入力が TextReader、String、Stream、または URI である場合の XmlDocument.Load メソッドが対象です。XmlDocument が XmlReader から読み込まれた場合の Load メソッドは対象外です。
XmlResolver プロパティ | 機能 | メモ |
---|---|---|
プロパティが、事前に作成された XmlResolver クラスに設定されており、そのクラスのプロパティはユーザーによって既に設定されている。 | XmlDocument は、ファイル名を解決するために指定された XmlResolver を使用し、DTD、エンティティ、スキーマなどの外部リソースへの参照を解決します。
XmlResolver は、XmlDocument のノードの追加や編集に必要な外部リソースを解決するときにも使用されます。 |
XmlDocument に指定された XmlResolver は、外部リソースの検索と解決が必要な場合に常に使用されるリゾルバです。 |
プロパティが null (VB .NET では Nothing) に設定されている。 | 外部のスキーマや DTD の検索など、外部リソースを必要とする機能はサポートされていません。外部エンティティの解決も行われず、解決が必要なエンティティ ノードの挿入などの編集機能もサポートされません。 | XmlDocument は、ファイルを匿名で読み込み、他のリソースを解決することはしません。 |
プロパティが設定されておらず、既定状態のままである。 | ファイル名を解決したり、外部の DTD、エンティティ、スキーマを検索するときには、XmlDocument が NULL 資格情報を持つ XmlUrlResolver をインスタンス化して使用します。ノードを編集するときには、null 資格情報が使用されます。 |
Load への入力が XmlReader であり、XmlDocument が完全に信頼されている場合の XmlDocument.Load メソッドを次の表に示します。
XmlResolver プロパティ | 機能 | メモ |
---|---|---|
XmlDocument で使用される XmlResolver クラスが、XmlReader で使用されるクラスと同じである。 | XmlDocument は、XmlReader に割り当てられた XmlResolver を使用します。
XmlDocument は XmlReader から XmlResolver を取得しているため、XmlDocument の信頼レベルにかかわらず、XmlDocument.Resolver プロパティは設定できません。XmlDocument の XmlResolver プロパティを設定して、XmlReader の XmlResolver の設定値をオーバーライドすることはできません。 |
XmlReader は、XmlTextReader、XmlValidatingReader、または独自に作成したリーダーにすることができます。使用するリーダーでエンティティ解決がサポートされている場合は、外部エンティティが解決されます。渡されたリーダーでエンティティ参照がサポートされていない場合は、エンティティ参照は解決されません。 |
信頼性の高くない XmlDocument
オブジェクトの信頼性が高くない場合の XmlDocument.XmlResolver プロパティの動作を次の表に示します。Load への入力が TextReader、String、Stream、または URI である場合の XmlDocument.Load メソッドが対象です。XmlDocument が XmlReader から読み込まれた場合の Load メソッドは対象外です。
XmlResolver プロパティ | 機能 | メモ |
---|---|---|
信頼性が高くないシナリオでは、XmlResolver プロパティは null 以外に設定できない。 | ファイル名を解決したり、外部の DTD、エンティティ、スキーマを検索するときには、XmlDocument が null 資格情報を持つ XmlUrlResolver をインスタンス化して使用します。ノードを編集するときには、null 資格情報が使用されます。 | この動作は、XmlResolver プロパティが設定されておらず、既定状態のままである場合と同じ動作になります。
XmlDocument では、すべての処理で、匿名のアクセス許可を使用します。 |
プロパティが null (VB .NET では Nothing) に設定されている。 | 外部のスキーマや DTD の検索など、外部リソースを必要とする機能はサポートされていません。外部エンティティの解決も行われず、解決が必要なエンティティ ノードの挿入などの編集機能もサポートされません。 | プロパティが null のときは、XmlDocument の信頼性の高低にかかわらず、同じ動作になります。 |
プロパティが設定されておらず、既定状態のままである。 | ファイル名を解決したり、外部の DTD、エンティティ、スキーマを検索するときには、XmlDocument が null 資格情報を持つ XmlUrlResolver をインスタンス化して使用します。ノードを編集するときには、null 資格情報が使用されます。 | XmlDocument では、すべての処理で、匿名のアクセス許可を使用します。 |
Load への入力が XmlReader であり、XmlDocument の信頼性が高くない場合の XmlDocument.Load メソッドを次の表に示します。
XmlResolver プロパティ | 機能 | メモ |
---|---|---|
XmlDocument で使用される XmlResolver クラスが、XmlReader で使用されるクラスと同じである。 | XmlDocument は、XmlReader に割り当てられた XmlResolver を使用します。
XmlDocument は XmlReader から XmlResolver を取得しているため、XmlDocument の信頼レベルにかかわらず、XmlDocument.Resolver プロパティは設定できません。XmlDocument の XmlResolver プロパティを設定して、XmlReader の XmlResolver の設定値をオーバーライドすることはできません。 |
XmlReader は、XmlTextReader、XmlValidatingReader、または独自に作成したリーダーにすることができます。使用するリーダーでエンティティ解決がサポートされている場合は、外部エンティティが解決されます。渡されたリーダーでエンティティ参照がサポートされていない場合は、エンティティ参照は解決されません。 |
.NET Framework Version 1.0 と、完全に信頼されたシナリオの .NET Framework Version 1.1 では、XmlResolver に正しい資格情報を設定すると、外部リソースにアクセスできます。
メモ XmlResolver プロパティを取得する方法はありません。これは、資格情報が設定されている XmlResolver をユーザーが再利用するのを防ぐためです。さらに、XmlTextReader または XmlValidatingReader を使用して XmlDocument を読み込むとき、XmlDocument にリゾルバが設定されていると、XmlDocument は、Load フェーズの後でこれらのリーダーからのリゾルバをキャッシュしなくなります。これにより、セキュリティ リスクが回避されます。
詳細については、「XmlResolver を使用したリソースの解決」を参照してください。