次の方法で共有


XmlValidatingReader.XmlResolver プロパティ

外部 DTD およびスキーマ位置参照を解決するために使用する XmlResolver を設定します。 XmlResolver は、XML スキーマ定義言語 (XSD) スキーマで見つかったインポート要素またはインクルード要素を処理するためにも使用されます。

Property XmlResolver As XmlResolver
[C#]
XmlResolver XmlResolver {set;}
[C++]
public: __property void set_XmlResolver(XmlResolver*);
[JScript]
public function set XmlResolver(XmlResolver);

プロパティ値

使用する XmlResolver 。 null 参照 (Visual Basic では Nothing) に設定されていると、外部リソースが解決されません。

.NET Framework Version 1.1 の場合、完全に信頼されている呼び出し元だけが XmlResolver を指定できます。

解説

XmlResolver は、検証プロセスを完了するために必要な DTD、エンティティ、またはスキーマを読み込むために使用します。

このプロパティはいつでも設定でき、次の Read 呼び出しの後に有効となります。このプロパティを null 参照 (Visual Basic では Nothing) に設定すると、リーダーは外部参照を解決する必要がないと判断します。この場合、リーダーは、リソースがある場合、内部リソースだけを検証します。

.NET Framework Version 1.1 では、このプロパティが設定されていない場合、アプリケーションの信頼性レベルによって既定の動作が決まります。

Fully-trusted code: リーダーは、ユーザー資格情報を持たない既定の XmlUrlResolver を使用します。ネットワーク リソースへのアクセスに認証が要求される場合、 XmlResolver プロパティを使用して必要な資格情報で XmlResolver を指定してください。

Semi-trusted code: XmlResolver プロパティが null 参照 (Nothing) に設定されています。外部リソースが解決されていません。

XML-Data Reduced (XDR) または XML Schema (XSD) を使用して検証するとき、 Schemas プロパティを使用する XmlSchemaCollection を提供して、負荷が大きい読み込みを処理しないようにできます。

使用例

[Visual Basic, C#, C++] XmlResolver プロパティを使用して、ネットワーク DTD ファイルのアクセスに必要な資格情報を指定する例を次に示します。

 
' Create the reader.
Dim txtreader as XmlTextReader = new XmlTextReader("book5.xml")
Dim reader as XmlValidatingReader = new XmlValidatingReader(txtreader)
txtreader.WhitespaceHandling = WhitespaceHandling.None

' Set the credentials necessary to access the DTD file stored on the network.
Dim resolver as XmlUrlResolver = new XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
reader.XmlResolver = resolver

' Display each of the element nodes.
while (reader.Read())
   select case reader.NodeType
     case XmlNodeType.Element:
       Console.Write("<{0}>", reader.Name)
     case XmlNodeType.Text:
       Console.Write(reader.Value)
     case XmlNodeType.DocumentType:
       Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value)
     case XmlNodeType.EntityReference:
       Console.Write(reader.Name)
     case XmlNodeType.EndElement:
       Console.Write("</{0}>", reader.Name)
   end select        
end while           

[C#] 
// Create the reader.
XmlTextReader txtreader = new XmlTextReader("book5.xml");
XmlValidatingReader reader = new XmlValidatingReader(txtreader);
txtreader.WhitespaceHandling = WhitespaceHandling.None;

// Set the credentials necessary to access the DTD file stored on the network.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
reader.XmlResolver = resolver;

// Display each of the element nodes.
while (reader.Read()){
   switch (reader.NodeType){
     case XmlNodeType.Element:
       Console.Write("<{0}>", reader.Name);
       break;
     case XmlNodeType.Text:
       Console.Write(reader.Value);
       break;
     case XmlNodeType.DocumentType:
       Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value);
       break;
     case XmlNodeType.EntityReference:
       Console.Write(reader.Name);
       break;
     case XmlNodeType.EndElement:
       Console.Write("</{0}>", reader.Name);
       break;
  }        
}           

[C++] 
// Create the reader. -> 
XmlTextReader* txtreader = new XmlTextReader(S"book5.xml");
XmlValidatingReader* reader = new XmlValidatingReader(txtreader);
txtreader -> WhitespaceHandling = WhitespaceHandling::None;

// Set the credentials necessary to access the DTD file stored on the network.
XmlUrlResolver* resolver = new XmlUrlResolver();
resolver -> Credentials = System::Net::CredentialCache::DefaultCredentials;
reader -> XmlResolver = resolver;

// Display each of the element nodes.
while (reader -> Read()) 
{
   switch (reader -> NodeType)
   {
   case XmlNodeType::Element:
      Console::Write(S"< {0}>", reader->Name);
      break;
   case XmlNodeType::Text:
      Console::Write(reader->Value);
      break;
   case XmlNodeType::DocumentType:
      Console::Write(S"<!DOCTYPE {0} [ {1}]", reader->Name, reader->Value);
      break;
   case XmlNodeType::EntityReference:
      Console::Write(reader->Name);
      break;
   case XmlNodeType::EndElement:
      Console::Write(S"</ {0}>", reader->Name);
      break;
   }
}

[Visual Basic, C#, C++] この例では、次のデータ ファイルを入力として使用しています。

[Visual Basic, C#, C++] book5.xml

<!DOCTYPE book SYSTEM 'http://myServer/DTDs/books.dtd'>
<book ISBN = '1-861001-57-5'>
  <title>Pride And Prejudice</title>
  <price>19.95</price>
  <misc>&h;</misc>
</book>

books.dtd

<!ELEMENT book (title,price,misc)> 
<!ATTLIST book 
   genre CDATA "novel"
   ISBN CDATA #REQUIRED>
<!ELEMENT title (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT misc (#PCDATA)>
<!ENTITY h "hardcover">
<!ENTITY p "paperback">

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

XmlValidatingReader クラス | XmlValidatingReader メンバ | System.Xml 名前空間 | XmlUrlResolver.Credentials | CredentialCache | NetworkCredential | XmlSecureResolver