Я пытаюсь прочитать RSS-канал от Flickr, но у него есть некоторые узлы, которые не читаются с помощью Simple XML ( media:thumbnail
, flickr:profile
и т. Д.).
Как мне обойти это? У меня болит голова, когда я смотрю документацию для DOM. Поэтому я хотел бы избежать этого, поскольку я не хочу учиться.
Кстати, я пытаюсь получить эскиз.
Решение объясняется в этой приятной статье . Вам нужен метод 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); }