Мне нужно вернуть данные, которые соответствуют значению переменной - PullRequest
2 голосов
/ 22 января 2012

У меня есть следующие погодные данные XML:

<weather>
  <current_conditions>
    <condition data="Mostly Cloudy" /> 
    <temp_f data="48" /> 
    <temp_c data="9" /> 
    <humidity data="Humidity: 71%" /> 
    <icon data="/ig/images/weather/mostly_cloudy.gif" /> 
    <wind_condition data="Wind: W at 17 mph" /> 
  </current_conditions>
  <forecast_conditions>
    <day_of_week data="Sun" /> 
    <low data="34" /> 
    <high data="48" /> 
    <icon data="/ig/images/weather/mostly_sunny.gif" /> 
    <condition data="Partly Sunny" /> 
  </forecast_conditions>
  <forecast_conditions>
    <day_of_week data="Mon" /> 
    <low data="32" /> 
    <high data="45" /> 
    <icon data="/ig/images/weather/sunny.gif" /> 
    <condition data="Clear" /> 
  </forecast_conditions>
</weather>

Я хочу вернуть строку, например, на основе дня на сегодня:

string theCondition = doc.XPathSelectElement(
  @"weather/current_conditions/condition"
).Attribute("data").Value;

Если у меня есть переменная, то это= "Sun" Я хочу вернуть ту же строку, что и выше, но <forecast_conditions>, где <day_of_week data="Sun">, а также для Пн, Вт, Ср.

Если данные недоступны, тогда мне нужно Console.WriteLine("no data").

Поскольку я новичок в программировании, я хочу продолжать использовать doc.XPathSelectElement на этом этапе.Заранее спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 22 января 2012
string day  = "Sun";
string path = "weather/forecast_conditions[day_of_week/@data='" + day + "']/condition";

doc.XPathSelectElement(path).Attribute("data").Value;

Обратите внимание, что вам нужно проверить, действительно ли doc.XPathSelectElement(path) вернул совпадение, прежде чем вызывать .Attribute("data").Value для него.

0 голосов
/ 23 января 2012

Использование :

string expr =
   string.Format
    ("string/*/forecast_conditions[day_of_week/@data = '{0}']/condition/@data)", 
      weekDay);

string forcastData = (string) doc.XPathEvaluate(expr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...