在php中从xml中删除对象

时间:2018-01-11 17:37:32

标签: php xml rss

我想拆分xml RSS feed。

这是我使用的。但它不起作用。似乎unset工作不正常。

<?php
header("Content-Type: application/rss+xml; charset=UTF-8");

$offset = 0;
$limit = 4;


$url = 'https://sociallysorted.com.au/blog/feed/';


$feed = simplexml_load_file($url);
$feedCount = count($feed->channel->item);

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


?>

总Feed数量为10我只需要前5个Feed。有时候最后5次喂食。但是使用这个代码,它将为我提供7个feed,这些是随机的。不是第一个或最后一个。

如果我更改了代码,就会显示它运行正常。

for ( $i = 0; $i < $feedCount; $i++ )  {
    if($i < $offset || $i > $limit){
        echo "DELETE $i <br/>";
        unset ($feed->channel->item[$i]);
    }else{
        echo "LOOP $i <br/>";
    }
}

输出

LOOP 0 
LOOP 1 
LOOP 2 
LOOP 3 
LOOP 4 
DELETE 5 
DELETE 6 
DELETE 7 
DELETE 8 
DELETE 9 

它看起来工作正常,但为什么它会显示7个Feed?

2 个答案:

答案 0 :(得分:0)

替换:

unset($feed->channel->item[$i]);

使用:

$feed->channel->item[$i] = null;

答案 1 :(得分:0)

看看这个。

$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();