ColdFusion XML解析多个响应

时间:2014-09-24 23:19:09

标签: xml google-maps-api-3 coldfusion

我正在使用Google Maps API,并尝试对某个地址进行地理编码。但是,出于某种原因,谷歌正在返回来自整个国家的类似地址,尽管我指定了一个城市,州和邮政编码。所以现在我有一个巨大的XML响应。如果您在自己的CF模板中运行以下代码,您将看到我在说什么。

我正在尝试获取“Bakersfield CA”地址的地理编码。但是,由于Google首先返回“Homer,LA”响应,这就是我的代码所采用的。

<cfhttp url="http://maps.googleapis.com/maps/api/geocode/xml?address=327%20BEARDSLEY%20AVE%20&city=Bakersfield&state=CA&zip=93308" method="get" timeout="300">                       </cfhttp>      

<cfif Left(CFHTTP.StatusCode, 3) EQ "200">                                  
    <cfset xmlResponse = XmlParse(CFHTTP.FileContent)>
    <cfset mylat = xmlResponse.GeocodeResponse.result.geometry.location.lat.xmlText>
    <cfset mylon = xmlResponse.GeocodeResponse.result.geometry.location.lng.xmlText>

    #mylat#                 
</cfif>


FOR DEBUGGING 
    <cfoutput>
    <cfdump var="#xmlResponse#">
    </cfoutput>

1 个答案:

答案 0 :(得分:2)

Google Maps Geocoding网络服务不支持您提供的parameters(城市,州,邮政编码),因此它会看到:

  

327 BEARDSLEY AVE

远未完全指定。

如果您将完整地址放在正确的参数(地址)中,它将为您提供您期望的结果:

http://maps.googleapis.com/maps/api/geocode/xml?address=327%20BEARDSLEY%20AVE,%20Bakersfield,%20CA,%2093308

支持的参数(根据documentation referenced above

地理编码(纬度/经度查找)

地理编码请求中的必需参数:

地址 - 您要进行地理编码的地址。      要么 组件 - 您希望获取地理编码的组件过滤器。有关更多信息,请参阅组件过滤。如果提供了地址,则组件过滤器也将被接受为可选参数。

地理编码请求中的可选参数:

bounds - 视口的边界框可以更加突出地偏向地理编码结果。此参数仅影响(而非完全限制)地理编码器的结果。 (有关详细信息,请参阅下面的“视口偏差”。)

密钥 - 您的应用程序的API密钥。此密钥用于标识您的应用程序以进行配额管理。了解如何从API控制台获取密钥。

语言 - 返回结果的语言。请参阅支持的域语言列表。请注意,我们经常更新支持的语言,因此此列表可能并非详尽无遗。如果未提供语言,则地理编码器将尝试使用尽可能从中发送请求的域的本地语言。

区域 - 区域代码,指定为ccTLD(&#34;顶级域&#34;)双字符值。此参数仅影响(而非完全限制)地理编码器的结果。 (有关更多信息,请参阅下面的区域偏差。)

组件 - 组件过滤器,由管道(|)分隔。每个组件过滤器由一个组件:值对组成,将完全限制地理编码器的结果。有关更多信息,请参阅下面的“组件过滤”。)