парсер xml с curl - PullRequest
       1

парсер xml с curl

0 голосов
/ 06 ноября 2011

Я создал скрипт curl, который анализирует xml-URL, используя curl, как показано ниже

<?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>";
}
?>

Массив $ array напечатан очень безупречно, но как его преобразовать, я не понимаю. потому что цикл foreach, как я использовал, не работает. это дает только две пустые результаты. пожалуйста помогите

Ответы [ 2 ]

0 голосов
/ 06 ноября 2011

Это должно работать:

foreach ($array['ResultOffset'] as $key => $val) {
    echo $key . ' -> ' . $val;
}

Edit:

Вы должны удалить приведение типа (массива) к 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;
    }
}
0 голосов
/ 06 ноября 2011

Simplexml требует ссылку на файловый буфер. Прочитайте curl_setopt, в частности CURLOPT_FILE. curl_exec возвращает (true / false). Вы, безусловно, не хотите этого.

Вот пример perl, как использовать буферы с curl:

#!/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 похожи, вы должны понять.

...