0

我想做的是从 rss 访问 yahoo 天气 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 文件中?

4

2 回答 2

0

您的 XPath 错误

预期的 XPath 应该是

/rss/channel/item/yweather:condition

其他事情是,XPath 包含前缀,因此您需要指定命名空间管理器。

您的代码应该是

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);
于 2014-02-08T10:03:15.347 回答
0

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

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);
}
于 2014-02-08T10:33:38.153 回答