XmlReader.ReadContentAs(Type, IXmlNamespaceResolver) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将内容作为指定类型的对象读取。
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
参数
- namespaceResolver
- IXmlNamespaceResolver
一个 IXmlNamespaceResolver 对象,用于解析与类型转换有关的任何命名空间前缀。 例如,将 XmlQualifiedName 对象转换为 xs:string
时可以使用此对象。
此值可为 null
。
返回
已转换为请求类型的串联文本内容或属性值。
例外
内容格式不是目标类型的正确格式。
试图进行的强制转换无效。
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。