首页 > 解决方案 > 我无法显示第二个媒体:使用 simpleXML 的内容

问题描述

似乎我无法检索第二个媒体:内容,即上面有 的width="460"那个。

<item>
   <title>...</title>
   <link>...</link>
   <description>...</description>

   <category domain="...">title</category>
   <category domain="...">Benjamin Netanyahu</category>
   <category domain="...">Judaism</category>
   <category domain="...">Religion</category>

   <pubDate>Mon, 23 Jul 2018 07:00:27 GMT</pubDate>

   <media:content width="140" url="**(i can retrieve this image)**">
      <media:credit scheme="urn:ebu">Photograph: Author 1</media:credit>
   </media:content>

   <media:content width="460" url="**(but i cant retrieve this one)**">
      <media:credit scheme="urn:ebu">Photograph: Author 2</media:credit>
   </media:content>

   <dc:creator>Touma-Sliman</dc:creator>
   <dc:date>2018-07-23T07:00:27Z</dc:date>
</item>

这是我当前的代码:

 foreach ($xml->channel->item as $key=>$item)
 {
    $results = (string)$item[0]->children('media', true)->content->attributes()['url'];
 }

标签: phpsimplexml

解决方案


...->content->...是 的简写...->content[0]->...,因此您只需要请求该节点的第一个实例。

相反,您需要以与遍历->content节点完全相同的方式遍历->item节点:

foreach ( $item->children('media', true)->content as $content ) 

或者,如果出于某种原因您知道您明确想要第二个节点,您可以要求 item [1]

$second_url = (string)$item->children('media', true)->content[1]->attributes()['url'];

(我已替换$item[0]为,因为该变量已经代表循环中每次$item的单个实例。)<item>


推荐阅读