У меня есть rss-канал, который генерирует xml следующим образом:
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/" xmlns:flow="http://www.flownetworks.com/schemas/media/0.1.0"><channel> <title>flow-Media Catalog</title> <link>http://catalog.flownetworks.com/catalogs/1/videos.mrss</link> <description>Video Catalog</description> <image> <url>http://img.ruphp.com/php/flow_media_current.png</url> <title>Get to know flow-Media</title> <link>http://www.flow-media.com</link> </image> <generator>flow-Media</generator> <item> <title>..</title> <link>..</link> <description>..</description> <pubDate>Wed, 01 May 2013 07:01:08 GMT</pubDate> <guid isPermaLink="false">9809880</guid> <flow:short_description/> <flow:video_product_id>52985890</flow:video_product_id> <flow:availability end="" start="2013-05-01T06:44:41Z"/> <flow:show/> <media:group> <media:category>US</media:category> <media:thumbnail url="http://img.ruphp.com/php/09d462107646ab09def454a1a923a423edd6d2d9_preview.jpg" height="360" width="640"/> <media:thumbnail url="http://img.ruphp.com/php/09d462107646ab09def454a1a923a423edd6d2d9_thumbnail.jpg" height="90" width="160"/> <media:content duration="101" medium="video" isDefault="true" url="http://player.flownetworks.com/swf/cube.swf?a=V5299690&m=9&w=420&h=375" type="application/x-shockwave-flash" expression="full" height="375" lang="en-us" width="420"> </media:content> </media:group> </item> </channel>
Я хочу сохранить изображение и значение категории в базе данных. Вот мой php-код:
$apiURL="http://catalog.flownetworks.com/catalogs/01/videos/search.mrss?api_key=%206784cb3bed8f80c55054ac0de996f8e9f0bf8763"; $videoId="&video_product_id=".$videoID.""; $combinevURL=$apiURL.$videoId; $mediafile = simplexml_load_file($combinevURL);
Проблема: проблема «simplexml_load_file» не генерирует имя категории и значение миниатюры мультимедиа для xml. Я хочу получить значение из этой справки xml.Please.
Чтобы успешно получить эти медиа-элементы, вам в первую очередь нужно найти родительский элемент. Как получить доступ к тем элементам, которые не относятся к именам, подробно изложены в основных примерах использования Simplexml , я избавляю вас от этого избыточного кода.
Итак, после получения родительского $item
в переменную – назовем это $item
этот раз – он работает так, как описано в уже намеченном дублированном материале Q & A , просто здесь, специфичном для вашего примера XML:
$media = $item->children('media', true); | __|__ <rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/" xmlns:flow="http://www.flownetworks.com/schemas/media/0.1.0">
Используя префикс пространства имен, он соответствует выделенной части префикса. Для этого требуется использовать true
качестве второго параметра.
Вы также можете использовать альтернативу, URI пространства имен, поэтому вы можете сэкономить второй параметр (по умолчанию FALSE
):
$media = $item->children('http://search.yahoo.com/mrss/'); | _______|_____________________ <rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/" xmlns:flow="http://www.flownetworks.com/schemas/media/0.1.0">
Независимо от того, какой вариант вы предпочитаете, сообщая simplexml, что именно вас беспокоят дети в медиапространстве XML-namespace, вы можете получить доступ к различным частям из этой медиа-группы, как вы ее знаете:
$group = $media->group; echo $group->category, "\n"; # US
Я надеюсь, что это полезно и явно показывает вам, как это работает для элементов с именами. Вам нужно использовать метод SimpleXMLElement::children()
и указать, какое пространство имен вы хотите получить от дочерних элементов.