检索带有标签 <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-&gt;content 之外,它的工作原理

那部分没有注册。在实际的提要中,标签被列为&lt;content:encoded&gt;,但我无法获取它。有什么建议吗?

【问题讨论】:

【参考方案1】:

&lt;content:encoded&gt; 中,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 和发布日期。但无法获得描述和图像。对于描述,它是一个&lt;p&gt; 标签。那么如何获取描述和封面图片呢? 在 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 应用程序元数据?

5分钟实现「视频检索」:基于内容理解,无需任何标签

如何从标签页的嵌入表单中检索文本框?

骆驼使用xpath检索xml标签名称

如何在 vue js 中显示从 firebase 检索到的标题标签 <h1> </h1> 的数据?

如何使用从 TextView 中的 firebaseDB 检索到的标签解析 HTML 文本?没有 WebView [重复]