我正在尝试使用http://api.met.no/weatherapi/locationforecast/1.9/?lat=49.8197202;lon=18.1673554 XML。 假设我想选择每个温度元素的所有值属性。
我尝试过这个。 const string url = "http://api.met.no/weatherapi/locationforecast/1.9/?lat=49.8197202;lon=18.1673554";
WebClient client = new WebClient();
string x = client.DownloadString(url);
XmlDocument xml = new XmlDocument();
xml.LoadXml(x);
XmlNodeList nodes = xml.SelectNodes("/weatherdata/product/time/location/temperature");
//XmlNodeList nodes = xml.SelectNodes("temperature");
foreach (XmlNode node in nodes)
{
Console.WriteLine(node.Attributes[0].Value);
}
但我一直都没有得到任何结果。我做错了什么?
答案 0 :(得分:0)
您是否尝试遍历每个属性?
foreach (XmlNode node in nodes)
{
//You could grab just the value like below
Console.WriteLine(node.Attributes["value"].Value);
//or loop through each attribute
foreach (XmlAttribute f in node.Attributes)
{
Console.WriteLine(f.Value);
}
}
答案 1 :(得分:0)
当前单斜杠的目标是根目录下的weatherdata,但根目录是weatherdata。
在xpath查询中添加前面的斜杠,使其成为双斜杠:
XmlNodeList nodes = xml.SelectNodes("//weatherdata/product/time/location/temperature");
双斜杠告诉xpath从当前节点中选择与选择匹配的文档中的节点,无论它们在何处。
或删除前面的斜杠:
XmlNodeList nodes = xml.SelectNodes("weatherdata/product/time/location/temperature");
查找包含根目录的整个路径。
此外,由于您显然想要名为value的值,请添加:
Console.WriteLine(node.Attributes["value"].Value);
由于node.Attributes [0] .Value的值可能不是您期望的顺序。