使用ASP.NET MVC进行Yahoo Weather Rss阅读?

时间:2012-10-18 13:20:42

标签: c# rss

我想在这里解析yahoo weather rss feed xml:http://developer.yahoo.com/weather/

我的Rss项目

public class YahooWeatherRssItem
{
    public string Title { get; set; }
    public string Link { get; set; }
    public string Description { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
    // temp, wind, etc...
}

我的Rss经理

public static IEnumerable<YahooWeatherRssItem> GetYahooWeatherRssItems(string rssUrl)
{
    XDocument rssXml = XDocument.Load(rssUrl);

    var feeds = from feed in rssXml.Descendants("item")
                select new YahooWeatherRssItem
                {
                    I can get following values
                    Title = feed.Element("title").Value,
                    Link = feed.Element("link").Value,
                    Description = feed.Element("description").Value,

                    // I dont know, How can I parse these.
                    Text = ?
                    Temp = ?
                    Code = ?
                };
        return feeds;
    }

我不知道,我如何解析以下xml行:

<yweather:condition  text="Mostly Cloudy"  code="28"  temp="50"  date="Fri, 18 Dec 2009 9:38 am PST" />
<yweather:location city="Sunnyvale" region="CA"   country="United States"/>
<yweather:units temperature="F" distance="mi" pressure="in" speed="mph"/>
<yweather:wind chill="50"   direction="0"   speed="0" />
<yweather:atmosphere humidity="94"  visibility="3"  pressure="30.27"  rising="1" />
<yweather:astronomy sunrise="7:17 am"   sunset="4:52 pm"/>

问题是yweather:<string>。可能有一篇关于xml解析的文章就像这个结构一样。还是代码示例?

感谢。

3 个答案:

答案 0 :(得分:2)

以下表达式应该有效,首先引用ycweather命名空间;

XNamespace yWeatherNS = "http://xml.weather.yahoo.com/ns/rss/1.0";

然后以这种方式获取属性值:

Text = feed.Element(yWeatherNS + "condition").Attribute("text").Value

问题是你的condition元素在另一个命名空间中,所以你必须通过XNamespace在该命名空间的上下文中选择这个节点。

您可以通过MSDN文章Namespaces in C#

了解有关XML命名空间的更多信息

答案 1 :(得分:1)

使用命名空间并使用Attribute

获取数据
XNamespace ns = "http://xml.weather.yahoo.com/ns/rss/1.0";
var feeds = from feed in rssXml.Descendants("item")
            select new YahooWeatherRssItem
            {

                Title = feed.Element("title").Value,
                Link = feed.Element("link").Value,
                Description = feed.Element("description").Value,
                Code=feed.Element(ns+"condition").Attribute("code").Value       
                //like above line, you can get other items 
            };

这会奏效。 TESTED:)

答案 2 :(得分:0)

您需要阅读这些值的XML属性。根据这里的问题(Find Elements by Attribute using XDocument),您可以尝试这样的事情:

Temp = feed.Attribute("temp");