地理编码 - 卷曲请求 - 将关联数组转换为xml

时间:2013-05-28 10:21:03

标签: php xml curl geocoding

我正在尝试将我的地理编码lat和lng数据转换为XML,以便我可以使用它:

这是我在googleapi中使用的网址示例:

http://maps.googleapis.com/maps/api/geocode/json?address=1600%20Amphitheatre%20Parkway,%20Mountain%20View,%20CA&sensor=false

到目前为止我的代码是:

    if (!function_exists('curl_init')){
        die('Sorry cURL is not installed!');
    }

    $c = curl_init();
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_URL, $request_url);
    $contents = curl_exec($c);
    curl_close($c);

    $xml = json_decode( json_encode( simplexml_load_string( $contents ) ), TRUE );
    var_dump($xml, $contents, $c); exit();

虽然内容正在传回,但在$ xml上一直返回false。

2 个答案:

答案 0 :(得分:0)

您不必将json转换为xml。

默认情况下,Google服务提供两种类型的输出。一个是JSON,另一个是XML。

在您提到的网址中,将字母'json'替换为字母'xml',以便它看起来像下面那样,它会给你xml输出。

http://maps.googleapis.com/maps/api/geocode/xml?address=1600%20Amphitheatre%20Parkway,%20Mountain%20View,%20CA&sensor=false

在浏览器中打开上面的网址,您可以在xml中看到结果。

以下是我在浏览器中直接提供上面提到的网址时获得的示例输出的摘录。

<GeocodeResponse>
<status>OK</status>
<result>
<type>street_address</type>
<formatted_address>
1600 Amphitheatre Parkway, Mountain View, CA 94043, USA
</formatted_address>
<address_component>

因此,在您的代码中,您可以删除json函数并直接使用$ xml = simplexml_load_string($ contents)......

...

答案 1 :(得分:0)

$xml = json_decode( json_encode( simplexml_load_string( $contents ) ), TRUE );

您正尝试使用simplexml_load_string将JSON数据转换为XML。如果您阅读the manual for simplexml_load_string,您将看到$ contents应该是“格式良好的XML字符串”。在您的情况下,$contents is a string representing JSON data

如果您想要XML,则应该访问Google API的this part。两个链接之间的区别:

使用SimpleXMLElement的示例:

$output = new SimpleXMLElement($contents);
var_dump($output);