【问题标题】:print object value from XML in PHP [closed]在 PHP 中从 XML 打印对象值 [关闭]
【发布时间】:2018-01-11 07:22:40
【问题描述】:

我需要阅读 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>";

?>

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

【问题讨论】:

  • 将所有channel节点放入一个数组中,当需要选择显示时使用array_chunk

标签: php xml rss


【解决方案1】:

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

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

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

这使您能够只删除您不想要的项目,它还具有保留原始文档中的任何其他数据的好处。 它循环遍历 item 元素并使用 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();

已更新 - 根据 cmets,代码正在从数组中删除项目,但没有相应地调整自身。代码现在跟踪删除的项目数,因此 $i 与当前数组内容的相对位置。

【讨论】:

  • 你的代码没有什么问题。在取消设置它对count 影响的任何提要后,您正在计算 for 循环中的提要项,您需要创建第一个变量 $feedCount = count($feed-&gt;channel-&gt;item) 并在循环中使用
  • 是的@AzeemHaider 你是对的
  • @AzeemHaider,谢谢你,它比这略多,但我已经更新了代码。下次我会坚持回答提出的问题。
猜你喜欢
  • 2020-06-30
  • 1970-01-01
  • 2012-11-08
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
相关资源
最近更新 更多