检索带有标签 <content:encoded> 的 RSS 提要
Posted
技术标签:
【中文标题】检索带有标签 <content:encoded> 的 RSS 提要【英文标题】:Retrieving RSS feed with tag <content:encoded> 【发布时间】:2011-03-21 18:30:11 【问题描述】:我有以下sn-p的代码:
function getFeed($feed_url)
$content = file_get_contents($feed_url);
$x = new SimpleXmlElement($content);
echo "<ul>";
foreach($x->channel->item as $entry)
echo "<li><a href='$entry->link' title='$entry->title'>" . $entry->title . "</a></li>";
echo "<li>$entry->content</li>";
echo "</ul>";
除了$entry->content
之外,它的工作原理
那部分没有注册。在实际的提要中,标签被列为<content:encoded>
,但我无法获取它。有什么建议吗?
【问题讨论】:
【参考方案1】:在<content:encoded>
中,content
是namespace,encoded
是标签名称。
你必须使用SimpleXMLElement::children
。查看
var_dump($entry->children("content", true));
【讨论】:
感谢您解释标签的含义以及您的回答。我试图用不同的库(iPhone 上的 TouchXML)来解决这个解析问题,这帮助我让它工作。评论以便这也将显示在对该库的搜索中。 :)【参考方案2】:这里的标签名称是“编码的”。 试试这个:
$url = 'put_your_feed_URL';
$rss = new DOMDocument();
$rss->load($url);
$feed = array();
foreach ($rss->getElementsByTagName('item') as $node)
$item = array (
'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
'pubDate' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue,
'description' => $node->getElementsByTagName('description')->item(0)->nodeValue,
'content' => $node->getElementsByTagName('encoded')->item(0)->nodeValue
);
array_push($feed, $item);
【讨论】:
您应该为此获得更多荣誉。这是 3 种解决方案中唯一对我有效的一种。 这确实是更好的解决方案。我推荐这个! 也让我省了很多心痛 我正在尝试使用此 URL - blog.botreetechnologies.com/feed 从媒体中获取数据。获得标题、博客 URL 和发布日期。但无法获得描述和图像。对于描述,它是一个<p>
标签。那么如何获取描述和封面图片呢?
在 Laravel 中完美运行【参考方案3】:
我会建议你以下代码:
function getFeed($feed_url)
$feeds = file_get_contents($feed_url);
$feeds = str_replace("<content:encoded>","<contentEncoded>",$feeds);
$feeds = str_replace("</content:encoded>","</contentEncoded>",$feeds);
$rss = simplexml_load_string($feeds);
echo "<ul>";
foreach($x->channel->item as $entry)
echo "<li><a href='$entry->link' title='$entry->title'>" . $entry->title . "</a></li>";
echo "<li>$entry->contentEncoded</li>";
echo "</ul>";
希望这对你有用。
【讨论】:
我针对另一个问题改进了这个答案,请参阅***.com/a/17731547/1815624 我正在尝试使用此 URL - blog.botreetechnologies.com/feed 从媒体中获取数据。获得标题、博客 URL 和发布日期。但无法获取描述和图像。对于描述,它是一个标签。那么如何获取描述和封面图片呢?
【参考方案4】:.... php 示例
<?php
// --------------------------------------------------------------------
$feed_url = 'http://www.tagesschau.de/xml/rss2';
$xml_data = simplexml_load_file($feed_url);
// --------------------------------------------------------------------
$i=0;
foreach($xml_data->channel->item as $ritem)
// --------------------------------------
$e_title = (string)$ritem->title;
$e_link = (string)$ritem->link;
$e_pubDate = (string)$ritem->pubDate;
$e_description = (string)$ritem->description;
$e_guid = (string)$ritem->guid;
$e_content = $ritem->children("content", true);
$e_encoded = (string)$e_content->encoded;
$n = ($i+1);
// --------------------------------------
print '<p> ---------- '. $n .' ---------- </p>'."\n";
print "\n";
print '<div class="entry" style="margin:0 auto; padding:4px; text-align:left;">'."\n";
print '<p> Title: '. $e_title .'</p>'."\n";
print '<p> Link: '. $e_link .'</p>'."\n";
print '<p> Date: '. $e_pubDate .'</p>'."\n";
print '<p> Desc: '. $e_description .'</p>'."\n";
print '<p> Guid: '. $e_guid .'</p>'."\n";
print '<p> Content: </p>'."\n";
print '<p style="background:#DEDEDE">'. $e_encoded .'</p>'."\n";
print '</div>'."\n";
// --------------------------------------
print '<br />'."\n";
print '<br />'."\n";
$i++;
// --------------------------------------------------------------------
?>
如果您想在浏览器中查看内容 html 源代码,请使用 eg:
print '<pre style="background:#DEDEDE">'. htmlentities($e_encoded) .'</pre>'."\n";
:=)
【讨论】:
【参考方案5】:对此的有效答案是:
$e_content = $entry->children("content", true);
$e_encoded = (string)$e_content->encoded;
【讨论】:
以上是关于检索带有标签 <content:encoded> 的 RSS 提要的主要内容,如果未能解决你的问题,请参考以下文章
如何通过带有本地容器注册表的 Docker 标签检索 SCDF 应用程序元数据?
如何在 vue js 中显示从 firebase 检索到的标题标签 <h1> </h1> 的数据?
如何使用从 TextView 中的 firebaseDB 检索到的标签解析 HTML 文本?没有 WebView [重复]