C# XmlDocument select 节点 returns 空
C# XmlDocument select nodes returns empty
我正在尝试与 http://api.met.no/weatherapi/locationforecast/1.9/?lat=49.8197202;lon=18.1673554 XML 合作。
假设我想 select 每个温度元素的所有值属性。
我试过了。
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);
}
但我总是一无所获。我做错了什么?
您是否试图遍历每个属性?
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);
}
}
当前的单斜杠指向根目录下的 weatherdata 但根目录是 weatherdata。
在您的 xpath 查询中添加前面的斜杠,使其成为双斜杠:
XmlNodeList nodes = xml.SelectNodes("//weatherdata/product/time/location/temperature");
双斜杠告诉 xpath 从当前节点到文档中的 select 个与 selection 匹配的节点,无论它们在哪里。
或删除前面的斜线:
XmlNodeList nodes = xml.SelectNodes("weatherdata/product/time/location/temperature");
查找包括根在内的整个路径。
此外,由于您显然想要名为 value 的值,因此请添加:
Console.WriteLine(node.Attributes["value"].Value);
因为 node.Attributes[0] 的值。值可能不是您期望的顺序。
我正在尝试与 http://api.met.no/weatherapi/locationforecast/1.9/?lat=49.8197202;lon=18.1673554 XML 合作。 假设我想 select 每个温度元素的所有值属性。
我试过了。
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);
}
但我总是一无所获。我做错了什么?
您是否试图遍历每个属性?
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);
}
}
当前的单斜杠指向根目录下的 weatherdata 但根目录是 weatherdata。
在您的 xpath 查询中添加前面的斜杠,使其成为双斜杠:
XmlNodeList nodes = xml.SelectNodes("//weatherdata/product/time/location/temperature");
双斜杠告诉 xpath 从当前节点到文档中的 select 个与 selection 匹配的节点,无论它们在哪里。
或删除前面的斜线:
XmlNodeList nodes = xml.SelectNodes("weatherdata/product/time/location/temperature");
查找包括根在内的整个路径。
此外,由于您显然想要名为 value 的值,因此请添加:
Console.WriteLine(node.Attributes["value"].Value);
因为 node.Attributes[0] 的值。值可能不是您期望的顺序。