XML 属性'InnerText'在尝试读取属性值时为仅写



当试图读取属性值时,我得到一个"属性'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,然后访问InnerTextXmlNodeXmlAttribute的基类,它的InnerText属性是读写而不是只写。例如:

CType(node.Attributes("ID"), XmlNode).InnerText

我不知道为什么它只写在XmlAttribute类。考虑到类的内部工作原理,想必这其中一定有一些很好的理由,尽管很难想象是什么原因。奇怪的是,在1.1版本的MSDN文档中,它实际上是框架版本中的读/写属性。然后,在2.0 - 4.0版本中,它将属性定义为只写,但它的描述是"获取或设置…"所以MSDN并没有完全一致

最新更新