使用 XmlResolver 解析資源
更新: November 2007
XmlReader 類別使用 XmlResolver 來解析外部 DTD、實體及結構描述。XmlReader 類別預設會使用沒有使用者認證的 XmlUrlResolver。藉由設定 XmlResolver 屬性並將 XmlReaderSettings 物件傳遞至 Create 方法,可以指定要使用的 XmlResolver。
下列程式碼會建立 XmlReader 執行個體,該執行個體會使用具有預設認證的 XmlUrlResolver。
' 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("https://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("https://ServerName/data/books.xml", settings);
// 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"https://ServerName/data/books.xml", settings );
如果 books.xml 檔案包含外部 DTD,XmlReader 會以下列方式處理它。若要解析 DTD,XmlReader 會呼叫 GetEntity 方法來取得實體的資料流表示。如果 DTD 的 URI 是相對 URI,則 XmlReader 會呼叫 ResolveUri 方法,並為指定的 relativeUri 及 baseUri 傳回絕對 URI。如果 XmlUrlResolver 不知道如何解析指定的 URI,則會傳回 null 參考。
GetEntity 方法會適當地使用 Credentials 屬性中的資訊來取得資源的存取。由於安全性原因,沒有針對此屬性的 get 存取子。當覆寫 XmlResolver 時,GetEntity 是利用 Credentials 屬性中認證資訊的方法。
解析所有其他 XML 資源與解析 DTD 很相似。XmlResolver 只需要知道如何交涉與外部資源的連接,並傳回內容的資料流表示。它是向可轉譯資料流之 XmlResolver 發出呼叫的物件。