2013-05-02 4 views
1

Я получаю «Property„InnerText“является WriteOnly» ошибка при попытке прочитать значение атрибутаXML Свойство «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

Я не вижу никаких причин, почему это только для записи и не знаю, как я могу измените его, чтобы я мог прочитать значение.

ответ

1

Это факт реализации XmlAttribute, что он поддерживает запись только в свой InnerText. Вы не «изменить», так что вы можете прочитать значение - использовать Value свойства:

Gets or sets the value of the node.

В качестве альтернативы, вы можете получить доступ к значению через InnerText если вы бросили XmlAttribute как XmlNode (базовый класс).

+0

Оказывается, он имеет отношение к базовому классу. По мере того как я просматривал свои результаты: Для каждого узла В nodeList я не объявлял тип узла. Я заметил это, поскольку IntelliSense не предлагал мне методы InnerText или Value. Я теперь объявил «Dim node As XmlNode» (который я удалил ранее) выше своего цикла, и он снова работает. Также, используя метод Innertext, а не метод Value. Благодаря! – Flo

0

Согласно MSDN:

The concatenated values of the node and all its children. For attribute nodes, this property has the same functionality as the Value property.

Вы должны просто использовать Value свойство, а не, как это:

node.Attributes("ID").Value 

Или вы можете привести его к XmlNode, а затем получить доступ к InnerText. XmlNode - базовый класс для XmlAttribute, а его свойство InnerText - это чтение-запись, а не только запись. Например:

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

Я не уверен, почему это только для записи в XmlAttribute классе. По-видимому, для этого должны были быть веские причины, учитывая внутреннюю работу класса, хотя трудно себе представить, что это будет. Странно то, что в документации MSDN в версии 1.1 фактически сказано, что это свойство чтения/записи в этой версии фреймворка. Затем в версиях 2.0 - 4.0 он определяет свойство как только для записи, но в его описании говорится: «Получает или устанавливает ...» Таким образом, MSDN не совсем согласуется с этим.

Смежные вопросы