System.Xml.XmlReader.Create 方法
本文提供此 API 參考文件的補充備註。
大部分的多 Create 載都包含 settings
接受 XmlReaderSettings 對象的參數。 您可以使用這個物件來:
- 指定您想要在物件上 XmlReader 支援哪些功能。
- XmlReaderSettings重複使用物件來建立多個讀取器。 您可以使用相同設定來建立具有相同功能的多個讀取器。 或者,您可以修改 實例上的 XmlReaderSettings 設定,並使用一組不同的功能來建立新的讀取器。
- 將功能新增至現有的 XML 讀取器。 Create 方法可以接受其他 XmlReader 物件。 基礎 XmlReader 物件可以是使用者定義的讀取器、 XmlTextReader 物件,或您想要新增其他功能的另一個 XmlReader 實例。
- 充分利用 XML 1.0(第四版)建議的更佳一致性檢查和合規性等功能,這些建議僅適用於XmlReader靜態Create方法所建立的物件。
注意
雖然 .NET 包含 類別的具體實XmlReader作,例如 XmlTextReader、 XmlNodeReader和 XmlValidatingReader 類別,但建議您使用 Create 方法建立XmlReader實例。
預設設定
如果您使用 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 SchemasXmlSchemaSet要用於驗證的 。 請注意, XmlReader 不支援 XML-Data Reduced (XDR) 架構驗證。 |
數據必須根據內嵌 XML 架構進行驗證。 | 按 ValidationType 移至 Schema ValidationFlags 至 ProcessInlineSchema。 |
輸入支援。 | 按 ValidationType 移至 Schema SchemasXmlSchemaSet要使用的 。 |
XmlReader 不支援 XML-Data Reduced (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