Получить атрибуты из элемента (тега) с помощью SimplePie - PullRequest
2 голосов
/ 12 марта 2012

Я пытаюсь получить атрибуты для тега "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 tag

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

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

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Если это фид 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).

0 голосов
/ 01 февраля 2014

Причина, по которой 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;
    }
}
...