解析php

时间:2016-03-17 12:32:23

标签: php xml geocode

我有一个xml网址,我要解析一行。但我的脚本甚至无法读取XML网址。我查看了PHP parsing XML from URL给出的答案,但我仍然在file_get_contents()命令中得到3个错误。其他一些网站没有错误。

我的脚本是:

    <?php
    header('Content-type: text/html; charset=utf-8');

    $url = "https://geodata.nationaalgeoregister.nl/geocoder/Geocoder?zoekterm=1056SW+11";
    $data = file_get_contents($url);
    $data = iconv(mb_detect_encoding($data, mb_detect_order(), true), "UTF-8", $data);
    $xml = simplexml_load_string($data);

    print_r($xml);      
?>

我尝试在这种情况下打印整个XML,但最终我希望它只打印xml的第5行,即坐标。如何克服错误,如何确保它只在此XML中打印一行?

提前致谢!

1 个答案:

答案 0 :(得分:1)

也许PHP有SSL连接问题(我有PHP 7,一切正常)。

一方面,您可以尝试在没有SSL的情况下请求URL:

<?php
    header('Content-type: text/html; charset=utf-8');

    $url = "http://geodata.nationaalgeoregister.nl/geocoder/Geocoder?zoekterm=1056SW+11";
    $data = file_get_contents($url);
    $data = iconv(mb_detect_encoding($data, mb_detect_order(), true), "UTF-8", $data);
    $xml = simplexml_load_string($data);

    print_r($xml);      
?>

或者您可以使用cURL进行连接(首选方法):

 $url = "https://geodata.nationaalgeoregister.nl/geocoder/Geocoder?zoekterm=1056SW+11";
 $c = curl_init();
 curl_setopt($c, CURLOPT_URL, $url);
 curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($c, CURLOPT_TIMEOUT, 10);
 $data = curl_exec($c);
 curl_close($c);

 print_r( $data );

如果你有XML字符串,你可以这样得到坐标:

$xml = simplexml_load_string($data);

$coord = $xml->xpath('/xls:GeocodeResponse/xls:GeocodeResponseList/xls:GeocodedAddress/gml:Point/gml:pos');    
echo $coord[0][0];