获取 RSS 时为 foreach() 提供的 PHP 参数无效

Posted

技术标签:

【中文标题】获取 RSS 时为 foreach() 提供的 PHP 参数无效【英文标题】:PHP Invalid argument supplied for foreach() when getting RSS 【发布时间】:2017-01-03 22:41:07 【问题描述】:

我似乎无法访问 RSS 提要的一部分。我已经阅读了这篇文章:Accessing date as XML node in php 和 Problem getting author from a wordpress RSS feed using SimpleXmlElement 文章,但我似乎仍然无法让它工作。

<item>
  <title>This is the title</title>
  <dc:creator>!an (@myHandle)</dc:creator>
  <description><![CDATA[<p class="TweetTextSize  js-tweet-text tweet-text"  lang="en">What is this tweeet</p>]]></description>
  <pubDate>Tue, 03 Jan 2017 22:01:54 +0000</pubDate>
  <guid>1234567</guid>
  <link>1234567</link>
  <twitter:source/>
  <twitter:place/>
</item>

这是我得到的 rss 的一部分。这是完整的 RSS:https://twitrss.me/twitter_search_to_rss/?term=test+this+feed

我正在尝试使用这样的 PHP 代码来访问它:

$feed = new DOMDocument();
 $feed->load('https://twitrss.me/twitter_search_to_rss/?term=test+this+feed');

foreach ($feed->getElementsByTagName('channel')->item(0) as $item) 
  $ns_dc = $item->children('http://purl.org/dc/elements/1.1/');
  echo $ns_dc->creator;

但我不断收到此错误:

为 foreach() 提供的参数无效

我已尝试将其更改为:

$feed->getElementsByTagName('channel')->item(0)

但没有任何输出。

我也试过了:

$feed->getElementsByTagName('channel')

但随后得到错误:

调用未定义的方法 DOMElement::children()

问题

请有人告诉我,如何使用 PHP 访问 dc:creator 标记并将该值分配给变量?

编辑

      $i = 1;
  foreach ($feed->channel as $row) 
    echo $i;
    
      foreach ($row->children() as $key => $val) 
          if ($key == "item") 
            if ($i == 1) 
              $ns_dc = $val->children('http://purl.org/dc/elements/1.1/');
              echo $ns_dc->creator;
              
          
          
      
      
    $i = $i + 1;
  

【问题讨论】:

看起来你应该只在你的 for each 中使用$feed-&gt;getElementsByTagName('channel') 请看答案底部。试过但得到错误:调用未定义的方法 DOMElement::children() 【参考方案1】:

由于您正在处理 XML 内容,我发现使用 SimpleXML 代替 DOMDocument 更容易。由于每个&lt;item&gt; 都与channel 位于同一块中,因此您可以执行foreach 查找item 的键。

$feed = simplexml_load_file('https://twitrss.me/twitter_search_to_rss/?term=test+this+feed');

foreach ($feed->channel as $row) 
    foreach ($row->children() as $key => $val) 
        if ($key == "item") 
            $ns_dc = $val->children('http://purl.org/dc/elements/1.1/');
            echo $ns_dc->creator;
        
    

此代码输出您期望的“创建者”字符串。

【讨论】:

不。我解决了。我只想要最新的。谢谢..我已经接受了答案并+1。感谢老兄的快速回复。

以上是关于获取 RSS 时为 foreach() 提供的 PHP 参数无效的主要内容,如果未能解决你的问题,请参考以下文章

在parallelStream中获取安全上下文时为空主体[重复]

从 RSS 提要获取实际内容

在 PHP 中解析 RSS2

通过 cURL 获取 RSS,在浏览器中正常但在终端中出现 404 错误

我的RSS使用介绍

[UWP]涨姿势UWP源码——RSS feed的获取和解析