我正在尝试从google map api返回的XML文件中获取地址(通过将lat / lng作为参数)。我使用以下代码。
XDocument doc = XDocument.Load("uri");
var city = doc.Descendants("result").Where(s => s.Descendants("type").FirstOrDefault().Value == "locality");
然后我正在读一个特定的后代
address = Convert.ToString(city.Descendants("formatted_address").First().Value);
我想在地图上显示。所有这些都是第一次正常工作(当我根据我的IPAddress获取lat / lng值时)但是当用户双击地图时(我应该得到点击的位置)程序正在崩溃。工作得很好。我检查了它因为在返回的xml文件中,有时在“result”下没有节点类型“locality”。我为这种情况编写了if和else if语句,但是调试器仍在if循环中,后来显示错误“Sequence contains no elements”。在WPF应用程序中执行此操作。
例如:27/14返回的唯一结果节点是type country& administrative_area_level_1。
答案 0 :(得分:2)
您没有向我们展示所涉及的XML,但我强烈怀疑问题在于您没有指定命名空间。你可能想要这样的东西:
XNamespace ns = "some namespace URI";
XDocument doc = XDocument.Load("uri");
var city = doc.Descendants(ns + "result")
.Where(s => s.Descendants(ns + "type")
.FirstOrDefault().Value == "locality");
当然可能涉及多个名称空间 - 请注意xmlns="..."
引起的名称空间继承。
我个人建议使用从XElement
到string
的简单强制转换而不是使用Value
属性 - 如果FirstOrDefault()
返回null,那么转换的结果也是空的。
(说实话,你的查询真的很有道理并不清楚。)