Простой XML – обращение с колонами в узлах

Я пытаюсь прочитать RSS-канал от Flickr, но у него есть некоторые узлы, которые не читаются с помощью Simple XML ( media:thumbnail , flickr:profile и т. Д.).

Как мне обойти это? У меня болит голова, когда я смотрю документацию для DOM. Поэтому я хотел бы избежать этого, поскольку я не хочу учиться.

Кстати, я пытаюсь получить эскиз.

Solutions Collecting From Web of "Простой XML – обращение с колонами в узлах"

Решение объясняется в этой приятной статье . Вам нужен метод children() для доступа к элементам XML, которые содержат пространство имен. Этот фрагмент кода цитируется в статье:

 $feed = simplexml_load_file('http://www.sitepoint.com/recent.rdf'); foreach ($feed->item as $item) { $ns_dc = $item->children('http://purl.org/dc/elements/1.1/'); echo $ns_dc->date; } 

Вы имеете дело с пространством имен? Я думаю, вам нужно использовать метод -> children.

 $ns_dc = $item->children('http://namespace.org/'); 

Можете ли вы предоставить фрагмент с объявлением xml?

С последней версией вы можете теперь ссылаться на узлы двоеточия с фигурными скобками.

 $item->{'itunes:duration'} 

Еще более простой метод, использующий PHP для доступа к узлам XML с именами без объявления пространства имен …

Чтобы получить значение <su:authorEmail > из следующего источника

 <item> <title>My important article</title> <pubDate>Mon, 29 Feb 2017 00:00:00 +0000</pubDate> <link>https://myxmlsource.com/32984</link> <guid>https://myxmlsource.com/32984</guid> <author>Blogs, Jo</author> <su:departments> <su:department>Human Affairs</su:department> </su:departments> <su:authorHash>4f329b923419b3cb2c654d615e22588c</su:authorHash> <su:authorEmail>hIwW14tLc+4l/oo7agmRrcjwe531u+mO/3IG3xe5jMg=</su:authorEmail> <dc:identifier>/32984/Download/0032984-11042.docx</dc:identifier> <dc:format>Journal article</dc:format> <dc:creator>Blogs, Jo</dc:creator> <slash:comments>0</slash:comments> </item> 

Используйте следующий код:

 $rss = new DOMDocument(); $rss->load('https://myxmlsource.com/rss/xml'); $nodes = $rss->getElementsByTagName('item'); foreach ($nodes as $node) { $title = $node->getElementsByTagName('title')->item(0)->nodeValue; $author = $node->getElementsByTagName('author')->item(0)->nodeValue; $authorHash = $node->getElementsByTagName('authorHash')->item(0)->nodeValue; $department = $node->getElementsByTagName('department')->item(0)->nodeValue; $email = decryptEmail($node->getElementsByTagName('authorEmail')->item(0)->nodeValue); }