System.Xml.XmlReader.Create 方法
本文提供了此 API 参考文档的补充说明。
Create大多数重载都包含接受settings
对象的XmlReaderSettings参数。 可以使用此对象来:
- 指定要在对象上 XmlReader 支持的功能。
- 重复使用该 XmlReaderSettings 对象来创建多个读取器。 可以使用相同的设置创建多个具有相同功能的读取器。 或者,可以修改实例上的 XmlReaderSettings 设置,并创建具有不同功能集的新读取器。
- 向现有 XML 读取器添加功能。 Create 方法可以接受其他 XmlReader 对象。 基础 XmlReader 对象可以是用户定义的读取者、 XmlTextReader 对象或要向其添加其他功能的另一 XmlReader 个实例。
- 充分利用仅在静态Create方法创建的对象上XmlReader可用的 XML 1.0(第四版)建议的更符合性检查和符合性等功能。
注意
尽管 .NET 包含类的具体实现XmlReader(例如XmlNodeReaderXmlTextReader,和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 Schemas 要用于验证的 XmlSchemaSet 。 请注意, XmlReader 不支持 XML-Data Reduced (XDR) 架构验证。 |
必须针对内联 XML 架构验证数据。 | ValidationType 至 Schema ValidationFlags 重命名为 ProcessInlineSchema。 |
类型支持。 | ValidationType 至 Schema SchemasXmlSchemaSet要使用的。 |
XmlReader 不支持 XML 数据缩减 (XDR) 架构验证。
异步编程
在同步模式下,该方法 Create 从文件、流或文本读取器的缓冲区读取第一块数据。 如果 I/O 操作失败,可能会引发异常。 在异步模式下,第一个 I/O 操作与读取操作一起发生,因此发生读取操作时将引发异常。
安全注意事项
默认情况下,使用XmlReaderXmlUrlResolver没有用户凭据的对象打开资源。 这意味着,默认情况下,XML 读取器可以访问不需要凭据的任何位置。 使用 XmlResolver 属性控制对资源的访问:
- 设置为 XmlResolver 对象 XmlSecureResolver 以限制 XML 读取器可以访问的资源,或者...
null
设置为XmlResolver阻止 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