使用SimplePie从item(tag)获取属性

时间:2012-03-12 17:05:12

标签: php rss feed simplepie

我正在尝试使用simplepie获取Feed中“id”标记的属性。

这是来自feed的代码片段:

<updated>2012-03-12T08:26:29-07:00</updated>
<id im:id="488627" im:bundleId="dmtmobile">http://www.example.com</id>
<title>Draw Something by OMGPOP - OMGPOP</title>

我想从 id 标记中包含的 im:id 属性中获取数字(488627)

我怎么能得到这个?

我尝试了$item->get_item_tags('','im:id'),但它无效

2 个答案:

答案 0 :(得分:2)

如果这是在Atom 1.0 Feed中,您将需要使用Atom namespace

$data = $item->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10,'id');

然后,您应该发现所需的属性是:

$id = $data['attribs'][IM_NAMESPACE]['id']
$bundleID = $data['attribs'][IM_NAMESPACE]['bundleId']`

其中IM_NAMESPACE设置为im XML命名空间(即xmlns:im的值是什么)。

答案 1 :(得分:0)

SimplePie要求命名空间的原因是因为它在内部存储给定命名空间下的节点元素。如果您不知道您的特定命名空间是什么,请使用print_r将其转储:

print_r($item->data['child']);

如果您知道命名空间,也可以直接访问子元素,或者编写一个简单的搜索器函数来遍历每个命名空间并查找匹配的标记。

$data = $item->data['child']['im']['bundleId'][0]['data'];

get_item_tags()函数很愚蠢,通常不会做你想要的,但它也非常简单,很容易用你自己的专用函数替换。原始来源是:

public function get_item_tags($namespace, $tag)
{
    if (isset($this->data['child'][$namespace][$tag]))
    {
        return $this->data['child'][$namespace][$tag];
    }
    else
    {
        return null;
    }
}