本文提供此 API 參考文件的補充備註。
大部分的 Create 重載都包含一個 settings 參數,該參數接受 XmlReaderSettings 對象。 您可以使用這個物件來:
- 指定您想要在 XmlReader 物件上支援哪些功能。
- 重複使用XmlReaderSettings物件來建立多個讀取器。 您可以使用相同的設定來建立具有相同功能的多個讀取器。 或者,您可以修改 實例上的 XmlReaderSettings 設定,並使用一組不同的功能來建立新的讀取器。
- 將功能新增至現有的 XML 讀取器。 方法 Create 可以接受另一個 XmlReader 物件。 基礎 XmlReader 物件可以是使用者定義的讀取器、 XmlTextReader 物件,或您想要新增其他功能的另一個 XmlReader 實例。
- 充分利用 XML 1.0(第四版) 建議的更佳一致性檢查和合規性等功能,這些建議僅適用於 XmlReader 靜態 Create 方法所建立的物件。
備註
雖然 .NET 包含 類別的具體實XmlReader作,例如 XmlTextReader、 XmlNodeReader和 XmlValidatingReader 類別,但建議您使用 XmlReader 方法建立Create實例。
預設設定
如果您使用 Create 不接受 XmlReaderSettings 物件的多載,則會使用下列預設讀取器設定:
| 設定 | 預設 |
|---|---|
| CheckCharacters | true |
| ConformanceLevel | ConformanceLevel.Document |
| IgnoreComments | false |
| IgnoreProcessingInstructions | false |
| IgnoreWhitespace | false |
| LineNumberOffset | 0 |
| LinePositionOffset | 0 |
| NameTable | null |
| DtdProcessing | Prohibit |
| Schemas | 空白 XmlSchemaSet 物件 |
| ValidationFlags | ProcessIdentityConstraints 啟用 |
| ValidationType | None |
| XmlResolver | null |
適用於常見案例的設定
以下是 XmlReaderSettings 您應該為一些一般 XML 讀取器案例設定的屬性。
| 要求 | 設定 |
|---|---|
| 數據必須是格式正確的 XML 檔。 | ConformanceLevel 至 Document。 |
| 數據必須是格式正確的 XML 剖析實體。 | ConformanceLevel 至 Fragment。 |
| 數據必須針對 DTD 進行驗證。 |
DtdProcessing 到 Parse ValidationType 至 DTD。 |
| 數據必須根據 XML 架構進行驗證。 |
ValidationType 到 Schema 使用Schemas和XmlSchemaSet進行驗證。 請注意, XmlReader 不支援 XML-Data 縮減 (XDR) 架構驗證。 |
| 數據必須根據內嵌 XML 架構進行驗證。 |
ValidationType 到 Schema ValidationFlags 至 ProcessInlineSchema。 |
| 打字支援。 |
ValidationType 到 Schema Schemas XmlSchemaSet去使用。 |
XmlReader 不支援 XML-Data 縮減 (XDR) 架構驗證。
非同步程式設計
在同步模式中,方法 Create 會從檔案、數據流或文字讀取器的緩衝區讀取第一個數據區塊。 如果 I/O 作業失敗,這可能會拋出例外。 在非同步模式中,第一次 I/O 作業是讀取作業,因此在讀取作業發生時,會拋出例外狀況。
安全性考慮
根據預設,XmlReader 會使用 XmlUrlResolver 物件,其中沒有使用者認證來開啟資源。 這表示 XML 讀取器預設可以存取不需要認證的任何位置。 XmlResolver使用 屬性來控制資源的存取:
- 設定 XmlResolver 為 XmlSecureResolver 物件,以限制 XML 讀取器可以存取的資源,或...
- 設定 XmlResolver 為
null以防止 XML 讀取器開啟任何外部資源。
範例
此範例會建立一個 XML 讀取器,以去除不重要的空白、刪除註解,並執行片段階段一致性檢查。
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create("books.xml", settings);
Dim settings As New XmlReaderSettings()
settings.ConformanceLevel = ConformanceLevel.Fragment
settings.IgnoreWhitespace = true
settings.IgnoreComments = true
Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
下列範例使用具有預設認證的 XmlUrlResolver 來存取檔案。
// Set the reader settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
settings.IgnoreProcessingInstructions = true;
settings.IgnoreWhitespace = true;
' Set the reader settings.
Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.IgnoreComments = true
settings.IgnoreProcessingInstructions = true
settings.IgnoreWhitespace = true
// 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("http://ServerName/data/books.xml", settings);
' 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("http://ServerName/data/books.xml", settings)
下列程式代碼會將讀取器實例包裝在另一個讀取器內。
XmlTextReader txtReader = new XmlTextReader("bookOrder.xml");
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("urn:po-schema", "PO.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create(txtReader, settings);
Dim txtReader As XmlTextReader = New XmlTextReader("bookOrder.xml")
Dim settings As New XmlReaderSettings()
settings.Schemas.Add("urn:po-schema", "PO.xsd")
settings.ValidationType = ValidationType.Schema
Dim reader As XmlReader = XmlReader.Create(txtReader, settings)
此範例會鏈結讀取器以新增 DTD 和 XML 架構驗證。
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.DTD;
XmlReader inner = XmlReader.Create("book.xml", settings); // DTD Validation
settings.Schemas.Add("urn:book-schema", "book.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader outer = XmlReader.Create(inner, settings); // XML Schema Validation
Dim settings As New XmlReaderSettings()
settings.ValidationType = ValidationType.DTD
Dim inner As XmlReader = XmlReader.Create("book.xml", settings) ' DTD Validation
settings.Schemas.Add("urn:book-schema", "book.xsd")
settings.ValidationType = ValidationType.Schema
Dim outer As XmlReader = XmlReader.Create(inner, settings) ' XML Schema Validation