共用方式為


解析外部資源

XmlDocument 類別可以使用 XmlDocumentXmlResolver 屬性尋找沒有內嵌到 XML 資料的資源,例如外部文件類型定義 (DTD)、實體和結構描述。這些項目可位於網路或本機磁碟上,並且可以由統一資源識別元 (URI) 辨識。如此可讓 XmlDocument 解析文件中出現的 EntityReference 節點,並依據外部 DTD 或結構描述驗證文件。

完全信任的 XmlDocument

XmlResolver 屬性會影響 XmlDocument.Load 方法的功能。下列表格顯示,在 XmlDocument 物件是完全受信任時,XmlDocument.XmlResolver 屬性將會如何運作。下列表格說明當 Load 的輸入為 TextReaderStringStreamURI 時的 XmlDocument.Load 方法。如果 XmlDocument 是從 XmlReader 載入,則這個表格不適用於 Load 方法。

XmlResolver 屬性 功能 附註

屬性設定為之前已建立的 XmlResolver 類別,而這個類別已經有由使用者設定好的屬性。

XmlDocument 使用 XmlResolver,而 XmlResolver 是指定用來解析檔案名稱、解析外部資源的參考 (例如 DTD、實體和結構描述)。

當解析在新增或編輯 XmlDocument 中節點必要的外部資源時,也會使用 XmlResolver

每當您要尋找並解析外部資源時,就必須使用指定給 XmlDocumentXmlResolver 解析程式。

屬性會設定為 null (在 Microsoft Visual Basic .NET 中則為 Nothing)。

不支援需要外部資源的的功能,例如尋找外部結構描述或 DTD。也不會解析外部實體,並且也不支援執行編輯功能 (例如插入需要解析的實體節點)。

XmlDocument 將檔案以匿名載入,並且不會嘗試解析任何其他的資源。

尚未設定屬性,但是保留為預設狀態。

在解析檔案名稱、尋找外部 DTD、實體和結構描述時,帶有 NULL 認證的 XmlUrlResolver 會被具現化,並且被 XmlDocument 使用,同時在編輯節點時會使用 null 認證。

 

下列表格說明當 Load 的輸入是 XmlReader,且 XmlDocument 完全受信任時的 XmlDocument.Load 方法。

XmlResolver 屬性 功能 附註

XmlDocument 使用的 XmlResolver 類別與 XmlReader 使用的類別相同。

XmlDocument 使用指定給 XmlReaderXmlResolver

因為 XmlDocument.Resolver 是從 XmlReader 取得 XmlResolver,所以不論 XmlDocument 的信任層級為何,XmlDocument.Resolver 的屬性都無法設定。您無法藉由設定 XmlDocumentXmlResolver 屬性,來覆寫 XmlReaderXmlResolver 的設定。

XmlReader 可能是 XmlTextReaderXmlValidatingReader 或自訂撰寫的讀取器。如果所用的讀取器支援實體解析,則會解析外部實體。如果傳遞的讀取器不支援實體參考,則不會解析實體參考。

非完全信任的 XmlDocument

下列表格顯示在物件是非完全信任時,XmlDocument.XmlResolver 屬性如何運作。當 Load 的輸入為 TextReaderStringStreamURI 時,此表格即適用於 XmlDocument.Load 方法。如果 XmlDocument 是從 XmlReader 載入,則這個表格不適用於 Load 方法。

XmlResolver 屬性 功能 附註

在非完全信任的案例中,XmlResolver 屬性只能設定為 null。

在解析檔案名稱、尋找外部 DTD、實體和結構描述時,帶有 null 認證的 XmlUrlResolver 會被具現化,並且被 XmlDocument 使用,同時在編輯節點時會使用 null 認證。

這個行為和 XmlResolver 屬性沒有設定並保留為預設狀態時的行為相同。

XmlDocument 使用匿名權限執行所有的動作。

屬性會設定為 null (在 Microsoft Visual Basic .NET 中則為 Nothing)。

不支援需要外部資源的的功能,例如尋找外部結構描述或 DTD。也不會解析外部實體,並且也不支援執行編輯功能,例如插入需要資源的實體節點。

若屬性是 null,則不論 XmlDocument 是完全受信任或非完全受信任,都會有相同的行為。

尚未設定屬性,但是保留為預設狀態。

在解析檔案名稱、尋找外部 DTD、實體和結構描述時,帶有 null 認證的 XmlUrlResolver 會被具現化,並且被 XmlDocument 使用,同時在編輯節點時會使用 null 認證。

XmlDocument 使用匿名權限執行所有的動作。

Load 的輸入為 XmlReader 並且 XmlDocument 是非完全信任時,這個表格適用於 XmlDocument.Load 方法。

XmlResolver 屬性 功能 附註

XmlDocument 使用的 XmlResolver 類別與 XmlReader 使用的類別相同。

XmlDocument 使用指定給 XmlReaderXmlResolver

因為 XmlDocument.Resolver 是從 XmlReader 取得 XmlResolver,所以不論 XmlDocument 的信任層級為何,XmlDocument.Resolver 的屬性都無法設定。您無法藉由設定 XmlDocumentXmlResolver 屬性,來覆寫 XmlReaderXmlResolver 設定。

XmlReader 可以是 XmlTextReader、驗證 XmlReader 或是自訂撰寫的讀取器。如果所用的讀取器支援實體解析,則會解析外部實體。如果傳遞的讀取器不支援實體參考,則不會解析實體參考。

設定 XmlResolver 使其含有正確的認證,即可存取外部資源。

Note注意事項

您無法擷取 XmlResolver 屬性。這有助於防止使用者重複使用已經在其上設定安全性認證的 XmlResolver。此外,若使用 XmlTextReader 或驗證 XmlReader 來載入 XmlDocument,且 XmlDocument 具有已經設定的解析程式,則 XmlDocumentLoad 階段之後將不會快取這些讀取器的解析程式,因為這也會帶來安全性方面的風險。

如需詳細資訊,請參閱使用 XmlResolver 解析資源

請參閱

概念

XML 文件物件模型 (DOM)