2013-02-23 11 views
0

У меня есть конкретная проблема:выбрать конкретные XML-узлу

смотрит на

<observation realtime_start="2013-02-23" realtime_end="2013-02-23" date="1975-01-01" value="4917.2"/> 
<observation realtime_start="2013-02-23" realtime_end="2013-02-23" date="1976-01-01" value="5186.8"/> 

Так что я пытаюсь получить значение атрибута в определенную дату, но

string xmlNode = root.SelectSingleNode("/observations/observation/@value").Value; 

, используя который получает первое значение (4917.2). Как бы я хотел указать, что я хочу значение с «1976-01-01» и 5186?

Спасибо.

+0

Вы действительно хотите вернуть '5186' или хотите фактическое значение (' 5186.8')? –

ответ

1

Это будет делать это:

string xmlNode = root.SelectSingleNode("/observations/observation[@date='1976-01-01']/@value").Value; 

Это говорит о том, чтобы выбрать @value узла наблюдения, дата которых 1976-01-01. И чтобы получить только целое число @value, вам, вероятно, понадобится использовать любой язык, на котором вы это делаете (я бы сказал, что он имеет функцию округления вниз). Как заметил и объяснил @JLRishe, ваш root представляется .NET XmlNode или XPathNavigator, который может выбирать только узел, поэтому ниже не будет работать и будет генерировать исключение. Я оставил это, чтобы показать, что есть функции xpath для округления.

string xmlNode = root.SelectSingleNode("floor(/observations/observation[@date='1976-01-01']/@value)").Value; 

При использовании функции XPath маршрута (который в этом случае вы не можете использовать), и если вы хотите, чтобы всегда округление до ближайшего целого числа, изменение пола округлить. И если вы хотите всегда округлить, смените пол на потолок.

+1

Если OP действительно хотел вернуть '5186' из' 5186.8', раунд не работал. 'floor()' будет лучшим вариантом. –

+0

Спасибо, Даниэль. Я отредактировал свой ответ так же, как вы разместили свой комментарий. :) – SpringSteven

+0

:-) +1 за хороший ответ –

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