在PHP中从XML打印对象值

时间:2018-01-11 07:22:41

标签: php xml rss

我需要阅读rss feed,然后按原样重新创建Feed 如果有10项我只需要3.但我想定义哪一项。前3或后3或中。在此之后,我需要在Feed中仅显示3个项目。但是大多数都是前一个。我的目的只是拆分饲料 在这里我正在使用但它不起作用。

<?php
header("Content-Type: application/rss+xml; charset=ISO-8859-1");

echo '<?xml version="1.0" encoding="UTF-8"?><rss version="2.0">';

$url_number = $_GET['u'];
$offset = $_GET['o'];
$limit = $_GET['l'];


$url = 'url_of_the_feed';

$feed = simplexml_load_file($url);

echo "<channel>". (string) $feed->channel. "</channel>";

$i = 1;

foreach($feed->channel->item as $item){

    if($i >= $offset && $i <= $limit){
        echo "<item>" . $item . "</item>";
    }

    if($i == $limit){
        break;
    }

    $i++;

}

echo "</channel></rss>";

?>

这不会在频道和项目中打印任何内容。

1 个答案:

答案 0 :(得分:0)

当你输出XML时,你只是回显出SimpleXMLElement对象($item),它不会给你任何有用的东西。您需要以XML格式输出元素。

    echo "<item>" . $item->asXML() . "</item>";

最好使用SimpleXML直接操作文档,但这可以解决您的直接问题。

这使您可以只删除不需要的项目,还可以保留原始文档中的任何其他数据。   它循环遍历项目元素,并使用unset删除您想要的范围之外的那些...

header("Content-Type: application/rss+xml; charset=ISO-8859-1");

$url_number = $_GET['u'];
$offset = $_GET['o'];
$limit = $_GET['l'];

$url = 'url_of_the_feed';

$feed = simplexml_load_file($url);
$removed = 0;
$itemCount = count($feed->channel->item);
for ( $i = 0; $i < $itemCount ; $i++ )  {
    if($i < $offset || $i > $limit){
        unset ($feed->channel->item[$i - $removed]);
        $removed++;
    }
}    
echo $feed->asXML();

更新 - 根据评论,代码是从数组中删除项目,但不相应地调整自身。代码现在跟踪删除的项目数,因此$i相对于当前数组内容的位置。