使用 simplexml 修改从 rss 文件中提取的数据

Modify data extracted from rss file with simplexml

我正在使用 simplexml 从 rss 文件中提取数据。中的网址错误,我正在尝试更改它们。 为了能够使用这些数据,我需要删除这些网址中“base”一词之前的所有内容。

我可以通过以下方式做到这一点:

<?php echo strstr($rss->channel->item[0]->link, 'base') ?: $rss->channel->item[0]->link;?>
<?php echo strstr($rss->channel->item[1]->link, 'base') ?: $rss->channel->item[1]->link;?>
<?php echo strstr($rss->channel->item[2]->link, 'base') ?: $rss->channel->item[2]->link;?>
etc...

但它看起来很乱,我很确定有一种方法可以更有效地完成它,而不必一遍又一遍地调用 strstr 函数。

我尝试了很多东西,以下给了我最好的结果:

foreach($rss->channel->item->link as $b)
{
$new_url[] = strstr($b, 'base') ?: $b;
}

但是当我调用它时:

<?php echo $new_url[0];?>
<?php echo $new_url[1];?>
<?php echo $new_url[2];?>

它只适用于第一个实例。

有什么想法吗?还是我完全错了?

在上面的示例中,您正在迭代项目...在 foreach 中,您正在将其绑定在链接上

使用 foreach($rss->channel->item->link as $b) 将在 $b

中给出 link

这些项目有 link 属性,因此在这种情况下,您可以循环使用这些项目。

代码可以是

foreach($rss->channel->item as $b)
{
    $new_url[] = strstr($b->link, 'base') ?: $b->link;
}

注意使用strstr

Returns the portion of string, or false if needle is not found.

如果 strstr returns 为假,则将 $b->link 添加到数组,该数组可能是 SimpleXMLElement.

类型

在这种情况下,您可以将其转换为字符串 (string)$b->link