2016-03-17 19 views
0

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

我的脚本是:

<?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

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

一方面,你可以尝试请求的URL没有SSL:

<?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);  
?> 

或者你也可以使用卷曲的连接(者优先法):

$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]; 
+0

感谢您的回复。我尝试了两个。当我使用你的第一个选项时,会出现这样的回应:SimpleXMLElement Object()。第二个答案是给我一个空白页。难道我做错了什么?我使用Xptpp apache运行的Aptana。我对PHP完全陌生。 – user30058

+0

是的,第一个输出是正确的,请使用我答案中的最后一个代码来获得该行。 ('$ coord = $ xm ....') –

+0

是的!这很有用,非常感谢。你能解释一下为什么一个prin $ xml不会显示整个xml,而只是一个带有SimpleXMLElement Object()的空白页面? – user30058