C#Yahoo天气,从yweather获取所有属性:condition

时间:2014-02-08 09:55:52

标签: c# xml rss yahoo-weather-api

我想要做的是从rss访问yahoo weather xml,并从yweather:condition标签中获取数据。我试过

xdoc.Load("http://xml.weather.yahoo.com/forecastrss?p=MKXX0001&u=c");
XmlNode xNode = xdoc.DocumentElement.SelectSingleNode("yweather:condition"); 

但没有成功。如何从yahoo天气访问xml并获取所有属性?另外,如何将所有属性保存到本地xml文件?

2 个答案:

答案 0 :(得分:0)

您的XPath错误

预期的XPath应该是

/rss/channel/item/yweather:condition

其他方面,XPath包含前缀,因此您需要指定namespacemanager。

您的代码应

XmlDocument xdoc = new XmlDocument();
xdoc.Load("http://xml.weather.yahoo.com/forecastrss?p=MKXX0001&u=c");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);
nsmgr.AddNamespace("yweather", "http://xml.weather.yahoo.com/ns/rss/1.0");
XmlNode xNode = xdoc.DocumentElement.SelectSingleNode("/rss/channel/item/yweather:condition", nsmgr);

答案 1 :(得分:0)

了解XPath以了解如何选择xml的每个特定元素。 Yahoo weather xml有名称空间,因此您需要XmlNamespaceManager作为SelectSingleNode方法的第二个参数。此示例演示如何从<yweather:condition>元素获取所有属性:

var xdoc = new XmlDocument();
xdoc.Load("http://xml.weather.yahoo.com/forecastrss?p=MKXX0001&u=c");
var nsmgr = new XmlNamespaceManager(xdoc.NameTable);
nsmgr.AddNamespace("yweather", "http://xml.weather.yahoo.com/ns/rss/1.0");
var _attributes = xdoc.SelectSingleNode("/rss/channel/item/yweather:condition", nsmgr).Attributes;
foreach (XmlAttribute attr in _attributes)
{
    Console.WriteLine("Attribute: {0}, Value: {1}", attr.Name, attr.Value);
}