2013-05-01 130 views
1

我有如下生成一个XML一个RSS提要URL:RSS XML解析的问题(如何从RSS提要媒体内容的价值?)

<?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&amp;m=9&amp;w=420&amp;h=375" type="application/x-shockwave-flash" expression="full" height="375" lang="en-us" width="420"> 
    </media:content> 
    </media:group> 
    </item> 
    </channel> 

我想保存的图像和在database.Here类别值是我的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.I的类别名称和媒体缩略图值要从此xml.Please获得价值帮帮我。

+0

检出http://stackoverflow.com/questions/1575788/php-library-for-parsing-xml-with-a-colons-in-tag-names用标记名称中的冒号解析XML – Waygood 2013-05-01 12:31:04

+0

@Waygood $ mediafile-> children('flow',true) - > media-> category;但它不返回任何东西 – CodePlayer 2013-05-01 12:42:35

+0

可能:$ mediafile-> item-> children('media',true) - > group-> category – Waygood 2013-05-01 12:45:18

回答

2

要成功获取这些媒体元素,首先您需要查找父元素。在the basic Simplexml usage examples中深入介绍了如何访问这些非命名空间元素,我在这里省去了这个冗余代码。

因此获得父母到一个变量后 - 姑且称之为$item这个时候 - 它的工作原理为the already hinted duplicated Q&A material概述,只是在这里具体到您的示例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命名空间,您可以从该媒体组中使用的各个部分,你知道它:

$group = $media->group; 
echo $group->category, "\n"; # US 

我希望这很有帮助,并明确向您展示它如何用于名称空间元素。您需要使用SimpleXMLElement::children()方法并指定您从哪个名称空间获取子元素。

+0

幸运的是,它的工作 – CodePlayer 2013-05-07 10:42:26

+0

@CodePlayer :(只有你喜欢,我要求做得更好)你能分享一下你的问题是为了获得这些信息吗?您是否知道XML有名称空间?还是这些元素看起来像你的正常元素,你没有注意到这些元素可能会有不同的表现? – hakre 2013-05-07 11:07:53