【问题标题】:How to access <content:encoded> with CDATA from RSS feed? [duplicate]如何从 RSS 提要使用 CDATA 访问 <content:encoded>? [复制]
【发布时间】:2015-10-06 23:07:17
【问题描述】:

问题

如果您尝试在 RSS 提要中访问 &lt;content:encoded&gt;,结果将为空。

XML

<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <item>
        <pubDate>Tue, 16 Jun 2015 14:58:15 +0200</pubDate>
        <title>title</title>
        <link>/your/path/</link>
        <description>description</description>
        <content:encoded>
        <![CDATA[
        <p>content</p>
        ]]>
        </content:encoded>
        </item>
    </channel>
</rss>

PHP

$data = simplexml_load_string($xml);

foreach ($data->channel->item as $item){
    $title = $item->title;
    var_dump($title); //title
    $content = $item->content;
    var_dump($content); //null
}

问题

如何访问内容并保存&lt;p&gt;content&lt;/p&gt;

【问题讨论】:

    标签: php rss cdata simplexml


    【解决方案1】:

    元素名称不是content,而是encodedcontent: 是“命名空间前缀”,在文档顶部绑定到命名空间标识符"http://purl.org/rss/1.0/modules/content/"

    因此,需要使用the -&gt;children() method来选择正确的命名空间:

    echo $item->children('http://purl.org/rss/1.0/modules/content/')->encoded;
    

    (显然,您可能会将命名空间标识符放入某个变量或常量中,以避免每次需要时都粘贴它。)

    请注意,我在这里使用了echo,而不是var_dumpvar_dump 不能很好地处理 SimpleXML(反之亦然?),除其他外,它看起来像是缺少 CDATA 内容。另一方面,echo 隐式转换为字符串以获取内容,效果很好。在实际代码中,您可能希望显式获取该字符串内容,如下所示:

    $encoded_content = (string) $item->children('http://purl.org/rss/1.0/modules/content/')->encoded;
    

    【讨论】:

      猜你喜欢
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 2011-04-09
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      相关资源
      最近更新 更多