【问题标题】:parse single line from XML URL in php从 php 中的 XML URL 解析单行
【发布时间】:2016-03-17 12:32:22
【问题描述】:

我有一个 xml URL,我想在其中解析一行。但我的脚本甚至无法读取 XML url。我查看了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 中的一行?

提前致谢!

【问题讨论】:

    标签: php xml geocode


    【解决方案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];
    

    【讨论】:

    • 感谢您的回复。我都试过了。显然,当我使用您的第一个选项时,它只给我这个响应: SimpleXMLElement Object ( ) 。第二个答案是给我一个空白页。难道我做错了什么?我使用运行 Xampp apache 的 Aptana。我对 php 完全陌生。
    • 是的,第一个输出是正确的,请使用我答案中的最后一个代码来获取该行。 ($coord = $xm .... )
    • 是的!这行得通,非常感谢。你能解释一下为什么 prin $xml 不显示整个 xml 而是只显示一个带有 SimpleXMLElement Object ( ) 的空页面吗?
    • 使用simplexml_load_string($data);,您正在创建一个XML 对象,您不能直接显示所有对象。你必须使用一种方法来处理它的数据。 (在这种情况下,SimpleXMLElement::xpath(); 跟随坐标路径并输出它们。)请阅读 PHP ObjectOrientedProgramming。
    • 会的。非常感谢您的帮助。
    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    相关资源
    最近更新 更多