当试图读取属性值时,我得到一个"属性'InnerText'是WriteOnly"错误
这是我的XML:
<?xml version="1.0" encoding="utf-8"?>
<products>
<product ID="11837">
<price currency="EUR">75.29</price>
<properties>
<property name="brand">
<value></value>
</property>
</properties>
<variations/>
</product>
</products>
要提取价格,我做:
node.SelectSingleNode("price").InnerText
返回"75.29"
但是当我这样做的时候:
node.Attributes("ID").InnerText
我得到错误:
属性'InnerText'为WriteOnly
我不知道为什么它是只写的,也不知道如何改变它,这样我就可以读取这个值
这是XmlAttribute
实现的一个事实,它只支持写入它的InnerText
属性。你不"改变它",这样你就可以读取值-你使用Value
属性:
获取或设置节点的值。
或者,如果您将XmlAttribute
转换为XmlNode
(其基类),则可以通过InnerText
访问该值。
根据MSDN:
节点及其所有子节点的连接值。对于属性节点,此属性具有与Value属性相同的功能。
您应该使用Value
属性,而不是像这样:
node.Attributes("ID").Value
或者您可以将其强制转换为XmlNode
,然后访问InnerText
。XmlNode
是XmlAttribute
的基类,它的InnerText
属性是读写而不是只写。例如:
CType(node.Attributes("ID"), XmlNode).InnerText
我不知道为什么它只写在XmlAttribute
类。考虑到类的内部工作原理,想必这其中一定有一些很好的理由,尽管很难想象是什么原因。奇怪的是,在1.1版本的MSDN文档中,它实际上是框架版本中的读/写属性。然后,在2.0 - 4.0版本中,它将属性定义为只写,但它的描述是"获取或设置…"所以MSDN并没有完全一致