本文提供了此 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 |
常用场景的设置
在某些典型的 XML 读取器场景中,您应该设置以下 XmlReaderSettings 属性。
要求 | 设置 |
---|---|
数据必须是格式正确的 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 数据缩减 (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