我制作了一个curl脚本,使用curl解析xml url,如下所示
<?php
$url = 'http://www.slideshare.net/api/2/search_slideshows?api_key=OKlHvfPo&ts=1320522764&hash=12bf522db6f39d8f96ec3d9187a88e32b02205a8&q=electrical+engineering&page=4&download=0&items_per_page=25';
echo $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Your application name');
$query = curl_exec($ch);
curl_close($ch);
$array = (array) simplexml_load_string($query);
//echo '<pre>';
//print_r($array);
foreach ($array as $key) {
echo $key['Title']. "<br>";
}
?>
数组$数组是非常紧密地打印但是如何对这个数组进行说明我不理解。因为我使用的foreach循环不起作用。它只给出了两个空的结果。请帮忙
答案 0 :(得分:0)
Simplexml需要对文件缓冲区的引用。阅读curl_setopt,特别是CURLOPT_FILE。 curl_exec返回(true / false)。你当然不希望这样。
以下是如何使用curl缓冲区的perl示例:
#!/usr/bin/perl -w
use strict;
use WWW::Curl::Easy;
my $curl = new WWW::Curl::Easy;
$curl->setopt(CURLOPT_HEADER, 0);
$curl->setopt(CURLOPT_URL, $url);
$curl->setopt(CURLOPT_FAILONERROR, 1);
$::errbuf="";
$curl->setopt(CURLOPT_ERRORBUFFER, "::errbuf");
my $response_body;
open (my $fileb, ">", \$response_body);
$curl->setopt(CURLOPT_WRITEDATA,$fileb);
my $retcode;
(($retcode = $curl->perform) == 0) and do {
# do something with $response_body
}
Perl和PHP类似,你应该明白这一点。
答案 1 :(得分:0)
这应该有效:
foreach ($array['ResultOffset'] as $key => $val) {
echo $key . ' -> ' . $val;
}
编辑:
您必须删除simplexml_load_string的(数组)类型转换。它应该已经是一个可迭代的对象了。
$xml = simplexml_load_string($query);
foreach ($xml as $element) {
if ($element->children()) {
foreach ($element->children() as $el) {
echo $el;
}
} else {
echo $element;
}
}