1

我正在尝试从 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 文件中,有时“结果”下没有节点类型“locality”。我为这种情况编写了 if 和 else if 语句,但调试器仍在 if 循环内部,后来显示错误“序列不包含元素”。在 WPF 应用程序中执行此操作。

例如:27/14 返回的唯一结果节点是类型国家和行政区域级别_1。

4

1 回答 1

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="..."

我个人建议使用从XElementto的简单转换string而不是使用Value属性 - 这样如果FirstOrDefault()返回 null,则转换的结果也为 null。

(说实话,您的查询是否真的很有意义,目前尚不清楚。)

于 2013-09-20T11:36:11.053 回答