Ler conteudo ficheiro XML/RSS usando PHP

$ficheiro = simplexml_load_file('url-para-xml-ou-rss');

Imaginando que fosse assim (hmmm não conservou espaços!!):
<artigos>
<artigo>
<numero>1</numero>
<stats>
<clicks>123</clicks>
</stats>
</artigo>
</artigos>

Acedes assim: $var2 = $ficheiro->numero ou $var3= $ficheiro->stats->clicks;

Não sei se para 1 também é preciso um foreach (exemplo com vários é foreach($ficheiro->artigo as $artigos))

A root tag (artigos) não é preciso ser acedida usando ->, porque é a própria variável a que dás o simplexml_load_file
 
Aparece tudo junto.
Aqui fica o meu código
Código:
<?php
function php_net_feed($limit)
{
        $output   = array();
        $feed_url = 'http://php.net/feed.atom';
        $feed    = simplexml_load_file($feed_url);
        $x              = 1;
        foreach ($feed->entry as $item) {
                if ($x <= $limit) {
                        $title  = $item->title;
                        $url      = $item->id;
                        $pub      = $item->updated;
                        $temp    = str_replace(array(
                                "<content>",
                                "</content>"
                        ), " ", $item->content->asXML());
                        $output[] = array(
                                'title' => $title,
                                'url' => $url,
                                'updated' => $pub,
                                'content' => $temp
                        );
                }
                $x++;
        }
        return $output;
}
$feed = php_net_feed(5);
?>
   <ul>
        <?php
foreach ($feed as $item) {
        echo '<li><a href="', $item["url"], '">', $item["title"], '</a></li>';
        echo date("Y-m-d H:i", strtotime($item['updated']));
        foreach ($item as $item["content"]) {
                echo $item["content"];
        }
}
?>
</ul>

e o link para veres como está
http://exp.net84.net/twitter/index2.php
 
Código:
foreach ($item as $item["content"]) {                
  echo $item["content"];         
}

por

Código:
echo $item['content'];

dentro das tags <content></content> está conteúdo em html (<p></p>, etc) por isso basta fazer echo.

Mas compreendi o que querias fazer :D
 
Código:
$feed = php_net_feed(5);
?>
   <ul>
        <?php
foreach ($feed as $item) {
        echo '<li><a href="', $item["url"], '">', $item["title"], '</a></li>';
        echo '<br &>';
        echo date("Y-m-d H:i", strtotime($item['updated']));
        echo $item['content'];
}
?>
</ul>

Tenho assim aqui no meu PC e dá como queres.
 
Então mas espera lá agora fiquei um bocado perdido...

echo '<br &>';
????

Realmente já tinhas dado a solução, eu é que devo ter feito alguma coisa de mal.
 
Última edição:
Então mas espera lá agora fiquei um bocado perdido...

echo '<br &>';
????

Realmente já tinhas dado a solução, eu é que devo ter feito alguma coisa de mal.

Engano meu, é <br />

Mesmo assim o <br /> não é preciso(e fica melhor), deixei lá quando andava a testar
 
Última edição:
No entanto fiquei algo confuso sobre o meu último foreach() porque é que tirando funcionou perfeitamente e com ele dava barraca?
 
Para que o foreach estivesse correto deveria ser de:
Código:
foreach ($item as $item["content"]) {                 
echo $item["content"];         
}

para :

Código:
foreach ($item["content"] as $content) {                 
echo $content;         
}

Mas como vi que o content do feed to php tem assim <content type="xhtml"> por isso penso que o xml reader do php não leia as tags dentro disto.

<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>The PHP development team announces the immediate availability of PHP 5.4.9 and PHP 5.3.19. These releases fix over 15 bugs. All users of PHP are encouraged to upgrade to PHP 5.4.9, or at least 5.3.19.</p> <p>For source downloads of PHP 5.4.9 and PHP 5.3.19 please visit our <a href="/downloads.php">downloads page</a>, Windows binaries can be found on <a href="http://windows.php.net/download/">windows.php.net/download/</a>.</p> <p>The list of changes are recorded in the <a href="/ChangeLog-5.php">ChangeLog</a>.</p> </div>
</content>

(Também só soube à pouco)
 
o teu foreach é inválido lol
Warning: Invalid argument supplied for foreach() in /home/a3876128/public_html/twitter/index50.php on line 35

Código:
$feed = php_net_feed(5);
?>
<ul>
        <?php
        foreach ($feed as $item) {
        echo '<li><a href="', $item["url"], '">', $item["title"], '</a></li>';
        echo date('l jS \of F Y h:i:s', strtotime($item['updated']));
       foreach ($item["content"] as $content) {                 
              echo $content;         
       }
}
?>

http://exp.net84.net/twitter/index50.php
 
Última edição:
"Mas como vi que o content do feed to php tem assim <content type="xhtml"> por isso penso que o xml reader do php não leia as tags dentro disto."

Como não pode ler as tags dentro do content, vai ser inválido. O foreach que indiquei era para corrigir o teu (porque estava mal de qualquer maneira) mas depois indiquei em baixo que não lê as tags lá dentro.
 
Back
Topo