0

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

这是我从 googleapi 使用的 URL 示例:

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,尽管内容正在被传回。

4

2 回答 2

0

您不必将 json 转换为 xml。

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

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

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

在浏览器中打开上面的url,你可以在xml中看到结果。

这是我在浏览器中直接给出上面提到的 url 时得到的示例输出的摘录。

<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 )...

...

于 2013-05-28T10:28:59.717 回答
0
$xml = json_decode( json_encode( simplexml_load_string( $contents ) ), TRUE );

您正在尝试使用simplexml_load_string将 JSON 数据转换为 XML 。如果您阅读了 simplexml_load_string 的手册,您会发现 $contents 应该是“格式良好的 XML 字符串”。在您的情况下,$contents 是一个表示 JSON data 的字符串

如果您需要 XML,则应该改为访问Google API 的这一部分。两个链接的区别:

使用SimpleXMLElement的示例:

$output = new SimpleXMLElement($contents);
var_dump($output);
于 2013-05-28T10:30:09.203 回答