Как запросить узлы ‹entry› из фида ATOM

Я могу запросить description узлов в канале RSS и вернуть такой результат:

$xpath = new DOMXPath($xmlDoc);
$items = $xpath->query('/rss/channel/item/description/..');

foreach($items as $number => $item){}

Но он ничего не возвращает, когда я запрашиваю entry узлов из канала Atom, подобного этому (в котором я следую тому же шаблону, что и RSS выше):

$xpath = new DOMXPath($xmlDoc);
$items = $xpath->query('/feed/entry/..');

foreach($items as $number => $item){}

Что мне не хватает?


person laukok    schedule 09.11.2011    source источник


Ответы (1)


Пространства имен RSS нет, тогда как элементы Atom находятся в следующем пространстве имен:

http://www.w3.org/2005/Atom 

Вы можете увидеть это, взглянув на элемент feed вашего документа, который, вероятно, выглядит примерно так:

<feed xmlns="http://www.w3.org/2005/Atom">

Вам необходимо зарегистрировать это пространство имен, прежде чем запрашивать элементы в нем:

$xpath->registerNamespace('a', 'http://www.w3.org/2005/Atom'); 

А затем используйте выбранный префикс пространства имен в своем выражении:

$items = $xpath->query('/a:feed/a:entry');
person Wayne    schedule 09.11.2011