PHP - 如何从foreach循环内的XML对象获取密钥编号

时间:2013-12-09 12:58:55

标签: php xml object

$data = simplexml_load_file($source_url);

如果我循环浏览一些看起来像这样的项目

    [item] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        [title] => Justin Bieber and Chance the Rapper Collaborate
                        [link] => http://feedproxy.google.com/~r/absolutepunknet/~3/vn98Mqyr4_4/showthread.php
                        [pubDate] => Mon, 09 Dec 2013 07:37:44 GMT
                        [description] => SimpleXMLElement Object
                            (
                            )

                        [category] => News
                        [guid] => http://www.absolutepunk.net/showthread.php?t=3576311
                    )

                [1] => SimpleXMLElement Object
                    (
                        [title] => SimpleXMLElement Object
                            (
                            )

                        [link] => http://feedproxy.google.com/~r/absolutepunknet/~3/IjS0KtTy8Ws/showthread.php
                        [pubDate] => Mon, 09 Dec 2013 07:06:56 GMT
                        [description] => SimpleXMLElement Object
                            (
                            )

                        [category] => News
                        [guid] => http://www.absolutepunk.net/showthread.php?t=3576281
                    )

使用


foreach ($data->channel->item as $key => $value)

如何访问并可能删除其中一个对象,在本例中,我想删除[1] => SimpleXMLElementOjbect

我尝试使用$ key的值,但只包含单词“item”。不能完全理解这一点。

2 个答案:

答案 0 :(得分:0)

如果要从XML元素(而不是数组项本身)中删除该项,可以这样做:

$dom = dom_import_simplexml($element);
$dom->parentNode->removeChild($dom);

删除数组项目@Dave Chen的答案应该有效(我认为只在foreach循环之外)

答案 1 :(得分:0)

直接使用DOMDocument,DOMXpath查找节点:

$dom = new DOMDocument();
$dom->load($rssFile);
$xpath = new DOMXpath($dom);

//fetch the second item into a list
$items = $xpath->evaluate('/rss/channel/item[2]');
foreach ($items as $item) {
  // remove the item from its parent node
  $item->parentNode->removeChild($item);
}

echo $dom->saveXml();

在Xpath列表中,位置从1开始而不是0. PHP中的索引1是Xpath中的位置2。