Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP如何点击url并下载其xml_Php_Xml_Json - Fatal编程技术网

PHP如何点击url并下载其xml

PHP如何点击url并下载其xml,php,xml,json,Php,Xml,Json,我正在尝试发送此查询: http://api.geonames.org/search?featureCode=PRK&maxRows=10&username=demo&country=US&style=full&adminCode1=AK 到web服务,并在那里下拉和解析一组字段,即: // 1) totalResultsCount // 2) name // 3) lat // 4) lng // 5) countryCode // 6) countr

我正在尝试发送此查询:

http://api.geonames.org/search?featureCode=PRK&maxRows=10&username=demo&country=US&style=full&adminCode1=AK
到web服务,并在那里下拉和解析一组字段,即:

// 1) totalResultsCount
// 2) name
// 3) lat
// 4) lng
// 5) countryCode
// 6) countryName
// 7) adminName1 - gives full state name
// 8) adminName2 - owner of the park.
我正在这样做:

$query_string = "http://api.geonames.org/search?featureCode=PRK&maxRows=10&username=demo&country=US&style=full&adminCode1=AK";

有人能提供正确的代码来循环结果并获取值吗

首先,看起来web服务返回的是XML而不是JSON。您可以使用来解析它

其次,你可能想退房

一个例子:

$ch = curl_init("http://api.geonames.org/search?featureCode=PRK&maxRows=10&username=demo&country=US&style=full&adminCode1=AK");

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$content = curl_exec($ch); 

curl_close($ch);

fopen将为您提供一个资源,而不是文件。因为您正在进行json解码,所以您需要将整个内容作为字符串进行解码。最简单的方法是文件获取内容

$query = 'http://api.geonames.org/search?featureCode=PRK&maxRows=10&username=demo&country=US&style=full&adminCode1=AK';
$response = file_get_contents($query);
// You really should do error handling on the response here.
$decoded = json_decode($response, true);
echo '<p>Decoded: '.$decoded['lat'].'</p>';
$query='1!'http://api.geonames.org/search?featureCode=PRK&maxRows=10&username=demo&country=US&style=full&adminCode1=AK';
$response=file\u get\u contents($query);
//您确实应该在这里对响应执行错误处理。
$decoded=json_decode($response,true);
回声'解码:'.$Decoded['lat'].

';
由于响应是XML,您可以使用:


你能给出一个你得到的“奇怪”结果的例子吗?但是这个URL返回的是XML,而不是JSON!更新了我的问题。关于JSON/XML的事情,我很抱歉。结果是XML。尽管。。。似乎来自API的响应数据正在返回XML。。。所以上面的代码不能正常工作。是的,它实际上是XML。我疏忽了。SimpleXml可以加载URI。你不需要
文件获取内容
我忽略了这一点。如果OP想要解析它,根本不需要cURL,因为SimpleXml可以加载远程URI。很好的调用。值得注意的是,他最初的问题完全不同(这是关于JSON的)。我最初的观点是关于他具体情况的旁注。
$url = "http://api.geonames.org/search?featureCode=PRK&maxRows=10&username=demo&country=US&style=full&adminCode1=AK";
$xml = new SimpleXMLElement($url, null, true);

echo "totalResultsCount: " . $xml->totalResultsCount . "<br />";

foreach($xml->geoname as $geoname) {
    echo $geoname->toponymName . "<br />";
    echo $geoname->lat . "<br />";
    echo $geoname->countryCode . "<br />";
    echo $geoname->countryName . "<br />";
    echo $geoname->adminName1 . "<br />";
    echo $geoname->adminName2 . "<br />";
}
totalResultsCount: 225
Glacier Bay National Park and Preserve
58.50056
US
United States
Alaska
US.AK.232

...