PHP 获取 RSS 时为 foreach() 提供的参数无效
PHP Invalid argument supplied for foreach() when getting RSS
我似乎无法访问 RSS 提要的一部分。我已阅读这篇文章:Accessing date as XML node in PHP and 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;
}
但我不断收到此错误:
Invalid argument supplied for foreach()
我尝试将其更改为:
$feed->getElementsByTagName('channel')->item(0)
但是没有输出。
我也试过:
$feed->getElementsByTagName('channel')
然后得到错误:
Call to undefined method 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;
}
由于您正在处理 XML 内容,我发现使用 SimpleXML 比使用 DOMDocument 更容易。由于每个 <item>
与 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;
}
}
}
此代码输出您期望的 "creator" 字符串。
我似乎无法访问 RSS 提要的一部分。我已阅读这篇文章:Accessing date as XML node in PHP and 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;
}
但我不断收到此错误:
Invalid argument supplied for foreach()
我尝试将其更改为:
$feed->getElementsByTagName('channel')->item(0)
但是没有输出。
我也试过:
$feed->getElementsByTagName('channel')
然后得到错误:
Call to undefined method 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;
}
由于您正在处理 XML 内容,我发现使用 SimpleXML 比使用 DOMDocument 更容易。由于每个 <item>
与 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;
}
}
}
此代码输出您期望的 "creator" 字符串。