在 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
相对于当前数组内容的位置。
我需要阅读 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
相对于当前数组内容的位置。