C# Yahoo Погода, получить все атрибуты от yweather: условие

То, что я хотел бы сделать, это получить доступ к XML погоды Yahoo из rss и получить данные конкретно из тега yweather: condition. Я пробовал с

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

Но безуспешно. Как я могу получить доступ к XML из погоды Yahoo и получить все атрибуты там? Кроме того, как я могу сохранить все атрибуты в моем локальном файле XML?

2 ответа

Изучите 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);
}

Ваш 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);
Другие вопросы по тегам