问题
I have a rss feed url which generates an xml as follows:
<?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://images.flow-media.com/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://images.flow-media.com/ap/2013/05/01/09d462107646ab09def454a1a923a423edd6d2d9_preview.jpg" height="360" width="640"/>
<media:thumbnail url="http://images.flow-media.com/ap/2013/05/01/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>
I want to save image and category value in database.Here is my php code:
$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);
Problem: the problem is "simplexml_load_file" do not generate category name and media thumbnail image value of the xml.I want to get value from this xml.Please help.
回答1:
To successfully obtain these media elements you first of all need to find the parent element. How to access those non-namespaced elements is outlined in depth in the basic Simplexml usage examples, I spare you this highly redundant code here.
So after obtaining the parent into a variable - let's call it $item
this time - it works as outlined in the already hinted duplicated Q&A material, just here specific to your example 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">
By using the namespace-prefix, it corresponds to the highlighted prefix part. This requires to use true
as second parameter.
You can also use the alternative, the namespace-URI, so you can spare the second parameter (defaults to 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">
Regardless which variant you prefer, telling simplexml exactly that you are concerned about children in the media XML-namespace enables you to access the various parts from within that media group as you know it:
$group = $media->group;
echo $group->category, "\n"; # US
I hope this is helpful and explicitly shows you how it works for the namespaced elements. You need to use the SimpleXMLElement::children() method and specify which namespace you mean of getting the children elements from.
来源:https://stackoverflow.com/questions/16318059/rss-xml-parsing-issue-how-to-get-media-content-value-from-the-rss-feed