在 PHP 中打印来自 XML 的对象值

print object value from XML in PHP

我需要阅读 rss 提要,然后按原样重新创建提要。
如果有 10 个项目,我只需要 3 个。但我想定义是哪一个。前 3 个或后 3 个或中间。在此之后我只需要在提要中显示 3 个项目。但喂养最多,因为它是前一个。只有我的目的是拆分 Feed。
这是我正在使用的,但它不起作用。

<?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>";

?>

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

当您输出 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 相对于当前数组内容的位置。