如何在php中取消设置xml元素?

Posted

技术标签:

【中文标题】如何在php中取消设置xml元素?【英文标题】:How to unset xml elements in php? 【发布时间】:2019-08-27 19:36:30 【问题描述】:

我正在编写如下所示的 php 代码,我希望在 php 中取消设置 xml 元素。

我已通过以下方式应用逻辑:

当 $a 为 4 时,它应该从 xml 中显示从顶部开始的第 4 项。 当 $a 为 3 时,它应该从 xml 中显示从顶部开始的第 3 个项目。 当 $a 为 2 时,它应该显示 xml 顶部的第二个项目。 当 $a 为 1 时,它应该显示 xml 顶部的第一项。

此时,我已将 a 的值设置为 4。

$a=4;
if ($a == 1)   // it would not unset item[0] and it should display item[0]   (April 5)
for($i = count($xml->channel->item); $i >= 1; $i--)
unset($xml->channel->item[$i]);                     

 else if ($a == 2)  // it would not unset item[1]  and it should display item[1] (April 4)
for($i = count($xml->channel->item); $i >= 2; $i--)
unset($xml->channel->item[$i]);

unset($xml->channel->item[0]);                 
 else if ($a == 3)  // it would not unset item[2] and it should display item[2]  (April 3)
for($i = count($xml->channel->item); $i >= 3; $i--)
unset($xml->channel->item[$i]);

unset($xml->channel->item[0]);
unset($xml->channel->item[1]);
 else if ($a == 4)  // it would not unset item[3] and it should display item[3]  (April 2)
for($i = count($xml->channel->item); $i >= 4; $i--)
unset($xml->channel->item[$i]);

unset($xml->channel->item[0]);
unset($xml->channel->item[1]);
unset($xml->channel->item[2]);
 else if ($a == 5)   // it would not unset item[4] and it should display item[4]   (April 1)
unset($xml->channel->item[0]);
unset($xml->channel->item[1]);
unset($xml->channel->item[2]);
unset($xml->channel->item[3]);

上面的代码不能正常工作。所有内容都从这个 xml http://www.cpac.ca/tip-podcast/jwplayer.xml 中提取出来

我已附上项目列表的屏幕截图。

【问题讨论】:

如果你只想显示第n个元素为什么你需要取消设置它之前的所有元素? @Nick 你能在回答中告诉我我需要做哪些修改吗? 你就不能echo $xml->channel->item[$a];吗? 喜欢这个if ($a == 1) echo $xml->channel->item[$a]; @Nick 你在吗? 【参考方案1】:

如果您想显示来自特定元素的信息,您可以直接通过其索引访问它,而无需删除其他条目。此代码适用于从您问题中的 URL 下载的 XML。请注意,xml 元素数组是 0 索引的,因此值为 2 将获得数组中的第三个条目,因此我们使用 $a-1 以便值 3 对应于第三个条目。另请注意,由于某些子节点具有不同的命名空间,因此会带来轻微的复杂性...

$xml = simplexml_load_string($xmlstr);
$a = 3;
$item = $xml->channel->item[$a-1];
echo "Title: " . $item->title . "\n";
echo "Description: " . $item->description . "\n";
$jw = $item->children('jwplayer', true);
echo "Image: " . $jw->image . "\n";
echo "Source: " . $jw->source->attributes()->file . "\n";

输出:

Title: April 3, 2019 
Description: Jody Wilson-Raybould and Jane Philpott are removed from the Liberal Caucus. Gerald Butts submits text messages, and other evidence, to the justice committee. The Environment Commissioner says Canada isn't doing enough to fight climate change. 
Image: http://media.cpac.ca/_app_images/tip_player_poster.png 
Source: http://www.cpac.ca/tip-podcast/1554286033.mp3

Demo on 3v4l.org

【讨论】:

这回答了您的问题吗?如果没有,您能否提供更多信息来帮助回答?否则,请考虑将答案标记为已接受(上/下投票箭头下的复选标记)。见***.com/help/someone-answers 抱歉耽搁了。我这两天病了,所以我没有机会去看。是的,它回答了我的问题。我还有一个question,虽然它不相似。我想知道你是否可以看看。 @flash 很抱歉听到这个消息 - 希望你感觉好多了。今天晚些时候我会看看你的另一个问题,现在要做一些工作......

以上是关于如何在php中取消设置xml元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中取消设置数组元素匹配索引?

如何从 PHP 数组中取消设置数字索引元素?

如何在 PHP 中取消设置 cookie?

如何在php中取消设置全局变量?

我如何在php中取消设置多个键

如何在php中取消设置空数组?