XmlReader.ReadContentAs(Type, IXmlNamespaceResolver) 方法

定义

将内容作为指定类型的对象读取。

public:
 virtual System::Object ^ ReadContentAs(Type ^ returnType, System::Xml::IXmlNamespaceResolver ^ namespaceResolver);
public virtual object ReadContentAs (Type returnType, System.Xml.IXmlNamespaceResolver namespaceResolver);
public virtual object ReadContentAs (Type returnType, System.Xml.IXmlNamespaceResolver? namespaceResolver);
abstract member ReadContentAs : Type * System.Xml.IXmlNamespaceResolver -> obj
override this.ReadContentAs : Type * System.Xml.IXmlNamespaceResolver -> obj
Public Overridable Function ReadContentAs (returnType As Type, namespaceResolver As IXmlNamespaceResolver) As Object

参数

returnType
Type

要返回的值的类型。

注意:随着 .NET Framework 3.5 的发布,returnType 参数的值现在可以为 DateTimeOffset 类型。

namespaceResolver
IXmlNamespaceResolver

一个 IXmlNamespaceResolver 对象,用于解析与类型转换有关的任何命名空间前缀。 例如,将 XmlQualifiedName 对象转换为 xs:string 时可以使用此对象。

此值可为 null

返回

Object

已转换为请求类型的串联文本内容或属性值。

例外

内容格式不是目标类型的正确格式。

试图进行的强制转换无效。

returnType 值为 null

当前节点不是所支持的节点类型。 有关详细信息,请参见下表。

  • 或 -

在上一次异步操作完成之前调用了 XmlReader 方法。 在此情况下,会引发 InvalidOperationException 并显示消息“异步操作已在进行中。”

读取 Decimal.MaxValue

示例

下面的示例使用 ReadContentAs 该方法将 colors 元素的内容返回到字符串对象的数组中。

using (XmlReader reader = XmlReader.Create("dataFile_2.xml")) {
      reader.ReadToDescendant("item");

      reader.MoveToAttribute("colors");
      string[] colors = (string[]) reader.ReadContentAs(typeof(string[]),null);
      foreach (string color in colors) {
         Console.WriteLine("Colors: {0}", color);
      }             		
}
Using reader As XmlReader = XmlReader.Create("dataFile_2.xml")

  reader.ReadToDescendant("item")
              
  reader.MoveToAttribute("colors")
  Dim colors As String() = CType(reader.ReadContentAs(GetType(String()), Nothing), String())
  Dim color As String
  For Each color In  colors
    Console.WriteLine("Colors: {0}", color)
  Next color
          
End Using

示例使用 dataFile_2.xml 文件作为输入。

<root>
  <item sale-item='true' productID='123456' colors='blue green black'>
    <price>9.95</price>
  </item>
  <item sale-item='false' productID='124390'>
    <price>5.95</price>
  </item>
  <item sale-item='true' productID='53298'>
    <price>12.95</price>
  </item>
</root>

注解

此方法读取当前读取器位置的文本内容,并将其转换为请求的返回类型。 文本、空白、有效空白和 CDATA 节串联在一起。 跳过注释和处理指令,并自动解析实体引用。

此方法用于读取、转换(如有必要)并从当前节点内容返回原子值项。 如果输入类型是当前节点类型的有效映射,则返回包含当前节点值的目标类型的实例。 有关默认映射列表,请参阅参考页中的 XmlReader “备注”部分。

例如,如果具有以下 XML 文本:

<elem>123 <!-- comment --> <?pi my_text?> 456 <?pi another_pi?></elem>

如果数据类型为类型化,并将字符串数组提供给 ReadContentAs 方法调用,则根据有效的 CLR 类型映射列表从字符串转换整数值。

如果数据为非类型化且字符串数组提供给 ReadContentAs 方法调用,则内容将分析为单独的字符串。 返回包含两个字符串的数组,值为“123”和“456”。 不会从内容中保留空格。

一般情况下,读取非类型化数据时,内容会根据所提供的类型进行分析。 例如,如果向方法调用提供 ReadContentAs 整数数组,则将字符串分析为整数 {123,456}数组。

在以下示例中,XML 文本不用空格分隔

<elem>123<!-- comment --><?pi my_text?>456789<?pi another_pi?></elem>

如果内容为非类型化且向方法调用提供 ReadContentAs 字符串数组,则返回包含一个串联字符串的数组,值为“123456789”。

下表介绍了此方法如何处理每个节点类型。

XmlNodeType 返回值 读取器行为
Text

CDATA

Whitespace

SignificantWhitespace

EntityReference

EndEntity
将文本、CDATA、空白和有效空白节点的串联内容转换为所请求的类型。 移至下一个开始元素或结束元素标记。 实体引用自动展开。
Attribute 与调用 XmlConvert.ToXxx 属性值相同。 读取器仍保留在当前位置。
Comment

ProcessingInstruction
忽略处理指令 (PI) 或注释,读取 PI 或注释后面的串联文本内容。 移至下一个开始元素或结束元素标记。 实体引用自动展开。
EndElement 空字符串。 读取器仍保留在当前位置。
Element

XmlDeclaration

None

Document

DocumentType

Notation

Entity

DocumentFragment
引发 InvalidOperationException 未定义,尽管通常读取器将保留在当前位置。

有关详细信息,请参阅参考页的 XmlReader “备注”部分和 W3C XML 架构第 2 部分:数据类型 建议。

有关此方法的异步版本,请参阅 ReadContentAsAsync

适用于