2014-02-08 41 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); 
}