Проблемы с php xpath

Я пытаюсь разобрать канал blogspot с помощью xpath, но он, похоже, не работает со всем, что я пытаюсь. Я не уверен, что это из-за пространств имен или что, но я надеялся, что кто-то сможет мне помочь. Вот код:

$xml = simplexml_load_file('http://feeds.feedburner.com/blogspot/MKuf'); $next = $xml->xpath("//link[@rel='next']"); print_r($next); 

Это просто возвращает пустой массив, и этого не должно быть. Я попробовал это сделать только ссылку или просто запись, и он все равно возвращается пустым. Единственный, с которым я могу работать, это *. Любая помощь приветствуется.

Как уже сказано в комментарии к вашему вопросу, у документа есть пространство имен по умолчанию, которое вы должны зарегистрировать, прежде чем вы сможете запросить его с помощью XPath.

Поскольку связанный дубликат показывает только, как это сделать с DOM, я добавлю пример SimpleXml

 $feed = simplexml_load_file('http://feeds.feedburner.com/blogspot/MKuf'); $feed->registerXPathNamespace('f', 'http://www.w3.org/2005/Atom'); foreach ($feed->xpath('//f:link[@rel="next"]') as $link) { var_dump($link); } 

Ручная страница: http://de.php.net/manual/de/simplexmlelement.registerxpathnamespace.php

Демо-версия

Как сказал Гордон, вам нужно зарегистрировать пространство имен по умолчанию для XML-документа, например:

 $xml->registerXPathNamespace('default', 'http://www.w3.org/2005/Atom'); 

И затем используйте префикс по default для обозначения обычных элементов:

 $next = $xml->xpath("//default:link[@rel='next']"); 

Более новые версии могут позволить вам определить пространство имен по умолчанию ( '' ). См. http://www.qc4blog.com/?p=281 для получения дополнительной информации.