Получить атрибуты из элемента (тега) с помощью 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;
}
}