Я могу запросить узлы 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){}
Что мне не хватает?
Нет пространства имен 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');