带curl的xml解析器

时间:2011-11-05 20:11:18

标签: php xml curl

我制作了一个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循环不起作用。它只给出了两个空的结果。请帮忙

2 个答案:

答案 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;
    }
}