2015-12-31 66 views
0

我有XML数据其中一些项目标签有媒体:内容标签有些没有。如何检查该内容是否存在于该XML以及如何获得媒体下的说明:content tag?
这里是XML数据:获取媒体:说明和媒体:内容URL从xml

<rss xmlns:content="" xmlns:wfw="" xmlns:dc="" xmlns:atom="" xmlns:sy="" xmlns:slash="" version="2.0"> 
    <channel> 
     <item> 
      <title>Title1</title> 
      <link>Link</link> 
      <pubDate>Date</pubDate> 
      <content:encoded> 
       <![CDATA[ This is description 1 ]]> 
       <![CDATA[ This is description 2 ]]> 
      </content:encoded> 
      <media:content url="URL" type="image/jpeg"> 
       <media:description> 
        <![CDATA[ Text ]]> 
       </media:description> 
      </media:content> 
     </item> 

     <item> -- this item tag does not have media: content 
      <title>Title2</title> 
      <link>Link2</link> 
      <pubDate>Date2</pubDate> 
      <content:encoded> 
       <![CDATA[ This is description 3 ]]> 
       <![CDATA[ This is description 4 ]]> 
      </content:encoded> 
     </item> 

     <item> 
      <title>Title3</title> 
      <link>Link3</link> 
      <pubDate>Date3</pubDate> 
      <content:encoded> 
       <![CDATA[ This is description 5 ]]> 
       <![CDATA[ This is description 6 ]]> 
      </content:encoded> 
      <media:content url="UR1L" type="image/jpeg"> 
       <media:description> 
        <![CDATA[ Text 2 ]]> 
       </media:description> 
      </media:content> 
     </item> 
    </channel> 
</rss> 

我想的是:

<?php 
function feeds() 
{ 
    $url = "http://localhost/xmldata/xmld.xml"; // xmld.xml contains above data 
    $feeds = file_get_contents($url); 
    $rss = simplexml_load_string($feeds); 
    foreach($rss->channel->item as $entry) { 
     if($entry->children('media', true)->content->attributes()) { 
       $md = $entry->children('media', true)->content->attributes(); 
       print_r("$md->url"); 
      } 
    } 
} 
?> 

它返回我的错误象下面这样:

节点不再存在

即使我没有任何想法获得媒体:描述这是在媒体:内容标记。

回答

2

您可以使用isset检查是否在SimpleXMLElement上设置了'media:content'属性。

我认为,如果你改变这些行,这将有助于:

foreach($rss->channel->item as $entry) { 
    if($entry->children('media', true)->content->attributes()) { 
     $md = $entry->children('media', true)->content->attributes(); 
     print_r("$md->url"); 
    } 
} 

要这些行:

$rss = @simplexml_load_string($feeds); 
foreach ($rss->channel->item as $entry) { 
    if (isset($entry->{'media:content'})) { 
     $url = (string)$entry->{'media:content'}->attributes()->url; 
     $description = (string)$entry->{'media:content'}->{'media:description'}; 
     echo "$url<br>"; 
     echo "$description<br>"; 
    } 
} 

会导致:

URL

文本

UR1L

文本2

+0

这不工作..它没有显示的网址和描述 –

+0

@hnn你是否有任何错误? –

+0

不,我没有得到任何错误,只是空白页 –

1

这是为我工作。

$namespaces = $entry->getNamespaces(true); 

$media_url = trim((string)$entry->children($namespaces['media'])->content->attributes()->url);