System.Xml.XmlReader.Create 方法

本文提供了此 API 参考文档的补充说明。

大多数Create重载都包含一个settings参数,该参数接受XmlReaderSettings对象。 可以使用此对象来:

  • 指定要在 XmlReader 对象上支持的功能。
  • 重复使用该 XmlReaderSettings 对象来创建多个读取器。 可以使用相同的设置创建具有相同功能的多个读取器。 或者,可以修改实例上的 XmlReaderSettings 设置,并创建具有不同功能集的新读取器。
  • 向现有 XML 读取器添加功能。 该方法 Create 可以接受另一个 XmlReader 对象。 基础 XmlReader 对象可以是用户定义的读取器、XmlTextReader 对象或要向其添加其他功能的另一 XmlReader 实例。
  • 充分利用诸如更好的一致性检查和符合 XML 1.0(第四版)建议等功能,这些功能仅在通过静态 XmlReader 方法创建的 Create 对象上可用。

注释

尽管 .NET 包含 XmlReader 类的具体实现(例如 XmlTextReaderXmlNodeReaderXmlValidatingReader 类),但我们建议通过使用 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 文档。 ConformanceLevelDocument
数据必须是格式正确的 XML 分析实体。 ConformanceLevelFragment
必须针对 DTD 验证数据。 DtdProcessingParse
ValidationTypeDTD
必须针对 XML 架构验证数据。 ValidationTypeSchema
SchemasXmlSchemaSet 用于验证。 请注意, XmlReader 不支持 XML-Data 缩减(XDR)架构验证。
必须针对内联 XML 架构验证数据。 ValidationTypeSchema
ValidationFlagsProcessInlineSchema
类型支持。 ValidationTypeSchema
SchemasXmlSchemaSet 以使用。

XmlReader 不支持 XML 数据缩减 (XDR) 架构验证。

异步编程

在同步模式下,该方法 Create 从文件、流或文本读取器的缓冲区读取第一块数据。 如果 I/O 操作失败,则可能会引发异常。 在异步模式下,第一个 I/O 操作是伴随读取操作发生的,因此产生的异常会在读取操作发生时引发。

安全注意事项

默认情况下,XmlReader使用一个XmlUrlResolver对象,该对象没有用户凭据,用于打开资源。 这意味着,默认情况下,XML 读取器可以访问不需要凭据的任何位置。 使用 XmlResolver 属性控制对资源的访问:

例子

此示例创建一个 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