我想在这里解析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解析的文章就像这个结构一样。还是代码示例?
感谢。
答案 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");