Как запросить узлы <entry>из канала ATOM - PullRequest
0 голосов
/ 09 ноября 2011

Я могу запросить узлы 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){}

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

1 Ответ

3 голосов
/ 09 ноября 2011

Нет пространства имен 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');
...