Получить атрибуты из элемента (тега) с помощью SimplePie

Я пытаюсь получить атрибуты для тега "id" в ленте с использованием simplepie.

Это фрагмент кода из фида:

<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>

Я хочу получить номер (488627) из атрибута im:id, содержащегося в теге id

Как я могу получить это?

Я старался $item->get_item_tags('','im:id') но это не сработало

2 ответа

Если это в ленте Atom 1.0, вы захотите использовать пространство имен Atom:

$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 является).

Причина, по которой 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;
    }
}
Другие вопросы по тегам