创建 XML 读取器

XmlReader 实例使用 Create 方法创建。 XmlReaderSettings 类用于指定要在 XmlReader 对象上启用的功能集。

重要说明重要事项

尽管在 .NET Framework 2.0 版中,Microsoft .NET Framework 包括 XmlReader 类的具体实现,例如 XmlTextReaderXmlNodeReaderXmlValidatingReader 类,但是,我们建议您使用 Create 方法创建 XmlReader 实例。

使用 XmlReaderSettings 类的属性启用或禁用功能。 然后,XmlReaderSettings 对象传递给 Create 方法。

通过使用 Create 方法和 XmlReaderSettings 类,您将得到下列好处:

  • 可以指定要在所创建的 XmlReader 对象上支持的功能。

  • XmlReaderSettings 类可以重复使用,以创建多个读取器对象。 可以使用相同的设置创建多个具有相同功能的读取器。 另外,可以修改 XmlReaderSettings 对象并创建具有不同功能集的新读取器。

  • 可以将功能添加到现有读取器中。 Create 方法可以接受其他 XmlReader 对象。 基础 XmlReader 对象可以是用户定义的读取器或 XmlTextReader 对象,也可以是要添加附加功能的另一个 XmlReader 实例。

  • 充分利用 .NET Framework 2.0 版本的 XmlReader 类中增加的所有新功能。 某些功能只能在通过 Create 方法创建的 XmlReader 对象上使用,例如更好的一致性检查以及与 XML 1.0 建议的一致性。

下表列出 XmlReaderSettings 类的默认属性设置。

属性

默认值

CheckCharacters

true

ConformanceLevel

ConformanceLevel.Document

IgnoreComments

false

IgnoreProcessingInstructions

false

IgnoreWhitespace

false

LineNumberOffset

0.

LinePositionOffset

0

NameTable

null

DtdProcessing

Prohibit

ProhibitDtd

true. 此属性已过时。 应改用 DtdProcessing

Schemas

空的 XmlSchemaSet 对象

ValidationFlags

启用 ProcessIdentityConstraints

ValidationType

ValidationType.None

XmlResolver

新的 XmlUrlResolver 对象

XmlReader 方案

下表介绍一些常见的方案以及要应用的 XmlReaderSettings 类的设置。

方案

XmlReaderSettings

要求数据是格式正确的 XML 文档。

ConformanceLevel = ConformanceLevel.Document

要求数据是格式正确的 XML 已分析实体。

ConformanceLevel = ConformanceLevel.Fragment

需要数据针对 DTD 进行验证。

DtdProcessing = DtdProcessing.Parse

ValidationType = ValidationType.DTD

需要数据针对 XML 架构进行验证。

ValidationType = ValidationType.Schema

Schemas = 要用于验证的 XmlSchemaSet

需要数据针对内联 XML 架构进行验证。

ValidationType = ValidationType.Schema

ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema

需要类型支持。

ValidationType = ValidationType.Schema

Schemas = 要使用的 XmlSchemaSet

一些特殊的方案可能要求使用不是通过 Create 方法创建的 XmlReader 实现。

注意注意

XmlValidatingReader 类在 .NET Framework 2.0 版中已过时。我们建议您考虑迁移到 XML 架构并使用 Create 方法返回的 XmlReader 对象进行验证。

  • 要从 XmlNode 对象中读取 XML 数据,请使用 XmlNodeReader 类。

  • 如果必须根据请求展开实体(通过 Create 方法创建的读取器展开所有实体),或者不希望标准化文本内容,请使用 XmlTextReader 类。

  • 如果不希望返回默认的属性,请使用 XmlTextReader 类。

实例化 XmlReader 对象

Dim settings As New XmlReaderSettings()
settings.ConformanceLevel = ConformanceLevel.Fragment
settings.IgnoreWhitespace = true
settings.IgnoreComments = true
Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create("books.xml", 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)
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 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
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

请参见

概念

用 XmlReader 读取 XML