尝试读取属性值时,XML属性“InnerText”是WriteOnly

时间:2013-05-02 12:55:51

标签: asp.net xml vb.net entity-attribute-value innertext

我在尝试读取属性值时遇到“Property'InperText'是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

我没有看到任何理由为什么它是只写的,并且不知道如何更改它以便我可以读取该值。

2 个答案:

答案 0 :(得分:1)

XmlAttribute的实现是一个事实,它只支持写入InnerText属性。您没有“更改它”以便您可以读取该值 - 您使用Value属性:

  

获取或设置节点的值。

或者,如果您将InnerText转换为XmlAttribute(其基类),则可以通过XmlNode访问该值。

答案 1 :(得分:0)

根据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并没有完全一致。