2014-02-08 43 views
0

我想要做的是从rss访问yahoo天气xml,并从yweather:condition标签中获取具体数据。我试过C#雅虎天气,从yweather获取所有属性:条件

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

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

回答

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); 
+0

然后如何将数据保存到本地文档xdoc2.Load(“data.xml”)? – user2962759

+0

@ user2962759:您可以使用“xdoc.OuterXml”的OuterXml属性从xdoc保存xml。要读取所有属性,您需要遍历'xNode.Attributes' –

0

了解XPath来知道如何选择XML的每一个特定的元素。雅虎天气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); 
}