使用 curl 和 php 从 url 读取 xml 数据

Posted

技术标签:

【中文标题】使用 curl 和 php 从 url 读取 xml 数据【英文标题】:Read xml data from url using curl and php 【发布时间】:2012-07-18 05:09:26 【问题描述】:

我想从 URL 读取 XML 数据。我的网址如下:

http://www.arrowcast.net/fids/mco/fids.asp?sort=city&city=&number=&airline=&adi=A

这是我的代码:

$Url="http://www.arrowcast.net/fids/mco/fids.asp?sort=city&city=&number=&airline=&adi=A";  
if (!function_exists('curl_init'))
    die('Sorry cURL is not installed!');
 
   $ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $Url);   
$output = curl_exec($ch);
$resultCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// Close the cURL resource, and free system resources
curl_close($ch);

谁能告诉我如何读取xml数据?

【问题讨论】:

【参考方案1】:

这里是一些示例代码(XML 解析模块可能在您的 php 安装中不可用):

<?php

$url="http://www.arrowcast.net/fids/mco/fids.asp?sort=city&city=&number=&airline=&adi=A";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);    // get the url contents

$data = curl_exec($ch); // execute curl request
curl_close($ch);

$xml = simplexml_load_string($data);
print_r($xml);

?>

变量$xml现在是一个多维键值数组,你应该很容易弄清楚如何从那里获取元素。

【讨论】:

好吧,原来你问错了问题。 “我想从 URL 读取 XML 数据”。您提供的 url 是 html 而不是 XML,该代码适用于返回的 curl 数据是 XML。请使用问题下方评论中的链接将该 HTML 呈现为数组。【参考方案2】:

这是关于如何从 youtube 的 rss 提要获取频道 ID 的演示,我在其中使用 curl 从 url 读取 xml 数据。

$channel_id = 'XXXXXXXX'; // put the channel id here

//using curl
$url = 'https://www.youtube.com/feeds/videos.xml?channel_id='.$channel_id.'&orderby=published';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
$response  = curl_exec($ch);
curl_close($ch);

$response=simplexml_load_string($response);
$json = json_encode($response);
$youtube= json_decode($json, true);

$count = 0;
if(isset($youtube['entry']['0']) && $youtube['entry']['0']!=array())

    foreach ($youtube['entry'] as $k => $v) 
        $yt_vids[$count]['id'] = str_replace('http://www.youtube.com/watch?v=', '', $v['link']['@attributes']['href']);
        $yt_vids[$count]['title'] = $v['title'];
        $count++;
    

else

    $yt_vids[$count]['id']=str_replace('http://www.youtube.com/watch?v=', '', $youtube['entry']['link']['@attributes']['href']);
    $yt_vids[$count]['title']=$youtube['title'];

echo "<pre>";
print_r($yt_vids);

【讨论】:

【参考方案3】:
// the SAX way:
XMLReader myReader = XMLReaderFactory.createXMLReader();
myReader.setContentHandler(handler);
myReader.parse(new InputSource(new URL(url).openStream()));

// or if you prefer DOM:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new URL(url).openStream());

【讨论】:

以上是关于使用 curl 和 php 从 url 读取 xml 数据的主要内容,如果未能解决你的问题,请参考以下文章

PHP 使用cURL PHP从URL获取数据

PHP 并行 curl 请求

php 读取网页源码 , 导出成txt文件, 读取xls,读取文件夹下的所有文件的文件名

使用 CURL 从 URL 获取 XML 在 PHP 更新后停止工作

php – cURL从重定向获取url

从URL加载下一组结果 - PHP cURL