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。
返回
已连接的文本内容或属性值转换为请求的类型。
例外
内容的格式不正确,适合目标类型。
尝试的强制转换无效。
值为 returnTypenull.
当前节点不是受支持的节点类型。 有关详细信息,请参阅下表。
-或-
在上一个异步操作完成之前调用了一个 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 | 返回值 | 读取者行为 |
|---|---|---|
TextCDATAWhitespaceSignificantWhitespaceEntityReferenceEndEntity |
文本、CDATA、空格和重要空白节点的串联内容转换为请求的类型。 | 移动到下一个起始元素或结束元素标记。 会自动扩展实体引用。 |
Attribute |
与调用 XmlConvert.ToXxx 属性值相同。 |
读取器将保留在当前位置。 |
CommentProcessingInstruction |
忽略处理指令(PI)或注释,并读取 PI 或注释后面的串联文本内容。 | 移动到下一个起始元素或结束元素标记。 会自动扩展实体引用。 |
EndElement |
空字符串。 | 读取器将保留在当前位置。 |
ElementXmlDeclarationNoneDocumentDocumentTypeNotationEntityDocumentFragment |
将引发 An InvalidOperationException 。 | 未定义,尽管读取器通常保留在当前位置。 |
有关详细信息,请参阅参考页的 XmlReader “备注”部分和 W3C XML 架构第 2 部分:数据类型 建议。
有关此方法的异步版本,请参阅 ReadContentAsAsync。