PHP SimpleXML尝试遍历节点时中断

时间:2012-07-11 10:10:50

标签: php xml simplexml

我正在尝试读取tumblr提供的xml信息,以便从tumblr创建一种新闻源,但我很困难。

<?php
    $request_url = 'http://candybrie.tumblr.com/api/read?type=post&start=0&num=5&type=text';
    $xml = simplexml_load_file($request_url);

    if (!$xml) 
    {
        exit('Failed to retrieve data.');
    }
    else 
    {
        foreach ($xml->posts[0] AS $post) 
        {
            $title = $post->{'regular-title'};
            $post = $post->{'regular-body'};
            $small_post = substr($post,0,320);

            echo .$title.;
            echo '<p>'.$small_post.'</p>';
        }
    }
?>

一旦尝试通过节点,它总是会中断。所以基本上“tumblr-&gt; posts; .... ect”显示在我的html页面上。

我尝试将信息保存为本地xml文件。我尝试使用不同的方法来创建simplexml对象,比如将它作为一个字符串加载(可能是一个愚蠢的想法)。我仔细检查了我的虚拟主机运行PHP5。所以基本上,我坚持为什么这不起作用。

编辑:好的我尝试从我开始的地方改变(回到原来的方式,从tumblr开始只是另一种(实际上是愚蠢的)尝试修复它的方式。它仍然在第一次 - &gt;之后断开,所以在屏幕上显示“posts [0] AS $ post .... ect”。

这是我在PHP中做过的第一件事,所以可能有一些显而易见的东西,我应该预先设置或者其他东西。我不知道也找不到那样的东西。

3 个答案:

答案 0 :(得分:0)

这应该有效:

<?php
$request_url = 'http://candybrie.tumblr.com/api/read?type=post&start=0&num=5&type=text';
$xml = simplexml_load_file($request_url);

if ( !$xml ){
    exit('Failed to retrieve data.');
}else{
    foreach ( $xml->posts[0] AS $post){
        $title = $post->{'regular-title'};
        $post  = $post->{'regular-body'};
        $small_post = substr($post,0,320);

        echo $title;
        echo '<p>'.$small_post.'</p>';
        echo '<hr>';
    }
}

答案 1 :(得分:0)

$xml->posts会返回帖子节点,因此如果您要迭代帖子节点,您应该尝试使用$xml->posts->post,这样您就可以能够遍历第一个帖子节点内的 post 节点。

同样,Needhi指出你不应该通过根节点( tumblr ),因为$xml代表自己是根节点。 (所以我修正了我的答案)。

答案 2 :(得分:0)

First thing in you code is that you used root element that should not be used.

    <?php
        $request_url = 'http://candybrie.tumblr.com/api/read?type=post&start=0&num=5&type=text';
        $xml = simplexml_load_file($request_url);

        if (!$xml) 
        {
            exit('Failed to retrieve data.');
        }
        else 
        {

           foreach ($xml->posts->post as $post) 
            {
                $title = $post->{'regular-title'};
                $post = $post->{'regular-body'};
                $small_post = substr($post,0,320);
                echo .$title.;
                echo '<p>'.$small_post.'</p>';
            }
        }
    ?>