PHP 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->posts;….ect"显示在我的html页面上。

我已经尝试将信息保存为本地xml文件。我尝试过使用不同的方法来创建simplexml对象,比如将其加载为字符串(可能是一个愚蠢的想法)。我仔细检查了一下我的网络主机是否正在运行PHP5。所以基本上,我一直在思考为什么这不起作用。

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

这是我用PHP做的第一件事,所以可能有一些明显的东西我应该事先设置好。我不知道,也找不到这样的东西。

这应该有效:

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

$xml->posts返回posts节点,因此如果您想迭代postsnodes,您应该尝试$xml->posts->post,它使您能够迭代第一个postnodes内的post节点。

正如Needhi所指出的,你不应该通过根节点(tumblr),因为$xml本身就是根节点。(所以我确定了答案)。

最新更新