【问题标题】:Reading specific values from XML response generated by google maps api从 google maps api 生成的 XML 响应中读取特定值
【发布时间】:2013-09-20 11:28:26
【问题描述】:

我正在尝试从 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。

【问题讨论】:

  • 你能发布一个小的 XML 示例吗?

标签: c# xml wpf


【解决方案1】:

您没有向我们展示所涉及的 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="..." 的命名空间继承。

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

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

【讨论】:

  • 对不起,我没有具体说明。无论如何我让它工作。在编写 if 语句时,我使用了“ if (city != null) ”。这导致错误,因为枚举数不为空。它有一个值表明它不为空。我是编码新手,如果我听起来很愚蠢,请原谅我。更正它,如果 (city.Count() > 0),检查城市枚举是否有任何节点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 2021-04-14
  • 1970-01-01
相关资源
最近更新 更多