需要帮助在C#中读取xml文件

时间:2011-08-18 00:37:04

标签: c# windows-phone-7 silverlight-4.0 linq-to-xml

我正在制作Windows手机程序,它将从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 个答案:

答案 0 :(得分:2)

好:

  • time-layout没有名为period-name的属性(它包含具有该属性的子元素)
  • 温度应该没关系,我想
  • weather没有weather-summary属性 - 它包含具有该属性的子元素
  • conditions-icon没有icons-link属性,它有icons-link个元素

换句话说,对于每个位,您需要准确查看XML包含的内容,然后确切地了解您要求的内容,小心区分元素和属性。

请注意,对于要转换为int的值(它们不需要额外的括号,顺便说一下),在这种情况下你应该得到一个异常 - 你显然无法获得实际的null值。是否可能抛出异常并且您没有注意到它?你的拦截块里有什么?