Нужна помощь в чтении XML-файла в C # - PullRequest
2 голосов
/ 18 августа 2011

Я делаю программу для Windows Phone, которая будет получать данные о погоде из XML-файла и отображать их на экране.Однако я получаю нулевые значения и не уверен, что делаю неправильно.

Пример XML-файла: http://forecast.weather.gov/MapClick.php?lat=44.52160&lon=-87.98980&FcstType=dwml

Вот что у меня есть:

try
{
    // get the stream containing the response from the async call
    streamResult = forecastState.AsyncResponse.GetResponseStream();

    // load the XML
    XElement xmlWeather = XElement.Load(streamResult);

    // find the source element
    XElement xmlCurrent = xmlWeather.Descendants("source").First();

    // get city and height
    xmlCurrent = xmlWeather.Descendants("location").First();
    mTempCityName = (string)(xmlCurrent.Element("city"));
    mTempHeight = (int)(xmlCurrent.Element("height"));

    //Find the forecast time
    xmlCurrent = xmlWeather.Descendants("time-layout").First();

    //store time of day in array
    mTimeOfDay = (string)(xmlCurrent.Attribute("period-name"));

    //Find the temperature
    xmlCurrent = xmlWeather.Descendants("temperature").First();
    mTemp = (int)(xmlCurrent.Element("value"));

    //now get the current weather conditions for each time period
    xmlCurrent = xmlWeather.Descendants("weather").First();
    mDescription = (string)(xmlCurrent.Attribute("weather-summary"));

    //now get icon links for weather
    xmlCurrent = xmlWeather.Descendants("conditions-icon").First();
    mIcon = (string)(xmlCurrent.Attribute("icon-link"));
}

1 Ответ

2 голосов
/ 18 августа 2011

Хорошо:

  • time-layout не имеет атрибута с именем period-name (у него есть подэлементы с этим атрибутом)
  • температура должна быть в порядке, я думаю
  • weather не имеет атрибута weather-summary - у него есть подэлементы с этим атрибутом
  • conditions-icon не имеет атрибута icons-link, имеет icons-link элементов

Другими словами, для каждого бита вам нужно посмотреть, что именно содержит XML, а затем - именно то, что вы запрашиваете, тщательно различая элементы и атрибуты.

Обратите внимание, что для значений, которые вы приводите к int (которым не нужны дополнительные скобки, между прочим), вы должны получить исключение в этом случае - вы явно не можете получить фактические нулевые значения. Возможно ли, что выдается исключение, а вы этого не замечаете? Что у тебя в улове?

...