2014-09-25 50 views
0

我知道子元素已经被讨论了很多,但是我已经经历了对相关问题的有用答案,并且似乎无法使它工作(编程新手,所以请耐心等待)。用PHP解析MRSS - 子元素

这里就是我的工作:

rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:bc="http://www.brightcove.tv/link"  xmlns:dcterms="http://purl.org/dc/terms/" version="2.0"> 
<channel> 
<title>Search Videos By Criteria</title> 
<link>...</link> 
<description/> 
<copyright>Copyright 2014</copyright> 
<lastBuildDate>Thu, 25 Sep 2014 13:29:49 -0700</lastBuildDate> 
<generator>http://www.brightcove.com/?v=1.0</generator> 
<item> 
<title>5 best guards in Lakers history</title> 
<link/> 
<description>...</description> 
<guid>video3805826070001</guid> 
<pubDate>Thu, 25 Sep 2014 05:11:39 -0700</pubDate> 
<media:content duration="121" medium="video" type="video/mp4" url="http://videos.usatoday.net/Brightcove2/29906170001/2014/09/29906170001_3805837947001_5-BEST-GUARDS-IN-LAKERS--HISTORY-final.mp4?videoId=3805826070001"/> 
<media:group>...</media:group> 
<media:keywords>jerry west,derek fisher,Gail Goodrich,losangeleslakers,SMGV,USA Today Sports,Kobe Bryant,video big board,sports,basketball,lakers,magic johnson,nba 
</media:keywords> 
<media:thumbnail height="90" url="http://videos.usatoday.net/Brightcove2/29906170001/2014/09/29906170001_3805822421001_Screen-Shot-2014-09-25-at-8-06-28-AM.jpg?pubId=29906170001" width="120"/> 
<media:thumbnail height="360" url="http://videos.usatoday.net/Brightcove2/29906170001/2014/09/29906170001_3805709286001_Screen-Shot-2014-09-25-at-8-06-28-AM.jpg?pubId=29906170001" width="480"/> 
<bc:titleid>3805826070001</bc:titleid> 
<bc:duration>121</bc:duration> 
<dcterms:valid/> 
<bc:accountid>44854217001</bc:accountid> 
</item> 

我用下面的脚本SimpleXML_Parser拉大部分的信息出来,我需要:

<?php 
$html = ""; 
$url = "http://api.brightcove.com/services/library?command=search_videos&any=tag:NBA&output=mrss&media_delivery=http&sort_by=CREATION_DATE:DESC&token=NU-nMdtzfF8z9NNinlAgM4c9S-9BBfKpm6gFISdwyk-AnQ84efFBbQ.."; 
$xml = simplexml_load_file($url); 
for($i = 0; $i < 80; $i++){ 
$title = $xml->channel->item[$i]->video; 
$link = $xml->channel->item[$i]->link; 
$title = $xml->channel->item[$i]->title; 
$pubDate = $xml->channel->item[$i]->pubDate; 
$description = $xml->channel->item[$i]->description;/* The code below starting with $html is where you setup how the parsed data will look on the webpage */ 
$html .= "<div><h3>$title</h3><br/>$description<p><br/>$pubDate<p><br/>$link<p><br/>$titleid<p><br/></div><iframe width='580' height='360' src='http://link.brightcove.com/services/player/bcpid3742068445001?bckey=/*deleted API key&bctid=$titleid' frameborder='0'></iframe><hr/>";} 
echo $html;/* tutorial for this script is here https://www.youtube.com/watch?v=4ZLZkdiKGE0 */?> 

我需要的是能够解析出来的饲料是分配给“titleid”的数字的字符串

我已经尝试在拉出子元素的方法中添加变体,例如:

$titleid = $xml->children(‘media’, true)->div->children(‘bc’, true)->div[$i]->titled; 

但没有任何运气。我确信这对于一位经验丰富的开发人员来说显而易见,但是我又是一名新手。

有什么建议吗?

感谢您的帮助!

+0

'“”'是无效报价从中提取想要的值 - 不要使用MS Word来裂伤你的代码。 – 2014-09-25 21:29:07

回答

1

要正确解析MRSS,首先需要将getNamespaces设置为true。

然后选择命名空间$xml->channel->item[$i]->children($namespaces['bc']) finaly你可以在你的情况id

<?php 

$html = ""; 
$url = "http://api.brightcove.com/services/library?command=search_videos&any=tag:NBA&output=mrss&media_delivery=http&sort_by=CREATION_DATE:DESC&token=NU-nMdtzfF8z9NNinlAgM4c9S-9BBfKpm6gFISdwyk-AnQ84efFBbQ.."; 
$xml = simplexml_load_file($url); 
$namespaces = $xml->getNamespaces(true); // get namespaces 

for($i = 0; $i < 80; $i++){ 
    $title = $xml->channel->item[$i]->video; 
    $link = $xml->channel->item[$i]->link; 
    $title = $xml->channel->item[$i]->title; 
    $pubDate = $xml->channel->item[$i]->pubDate; 
    $description = $xml->channel->item[$i]->description; 

    $titleid = $xml->channel->item[$i]->children($namespaces['bc'])->titleid; 

    echo $title_group .'<br>'; 

} 
+0

这工作,非常感谢艾萨克!非常感谢您的帮助。 – GeometryFletch 2014-09-29 06:22:42

+0

我有一个新的MRSS源,我试图使用这个脚本和你建议的改变,但我无法正确地工作。新的Feed: – GeometryFletch 2014-10-14 19:30:54