C#XmlDocument选择节点返回空

时间:2016-12-15 19:51:36

标签: c# xmldocument selectnodes

我正在尝试使用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);
        }

但我一直都没有得到任何结果。我做错了什么?

2 个答案:

答案 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的值可能不是您期望的顺序。