使用 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 读取网页源码 , 导出成txt文件, 读取xls,读取文件夹下的所有文件的文件名