我需要阅读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>";
?>
这不会在频道和项目中打印任何内容。
答案 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
相对于当前数组内容的位置。