Простой XML - обращение с колонами в узлах
Я пытаюсь прочитать RSS-канал от Flickr, но у него есть некоторые узлы, которые не читаются Simple XML (media:thumbnail
, flickr:profile
и т.д.).
Как мне обойти это? У меня болит голова, когда я смотрю документацию для DOM. Поэтому я хотел бы избежать этого, поскольку я не хочу учиться.
Я пытаюсь получить миниатюру кстати.
Ответы
Ответ 1
Решение объясняется в этой хорошей статье. Вам нужен метод 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;
}
Ответ 2
Вы имеете дело с пространством имен? Я думаю, вам нужно использовать метод → children.
$ns_dc = $item->children('http://namespace.org/');
Можете ли вы предоставить фрагмент с объявлением xml?
Ответ 3
В последней версии вы можете теперь ссылаться на узлы двоеточия с фигурными скобками.
$item->{'itunes:duration'}
Ответ 4
Еще более простой метод с использованием 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);
}