如果您尝试访问RSS Feed中的<content:encoded>
,结果将为空。
<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>
$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
}
如何访问内容并保存<p>content</p>
?
答案 0 :(得分:3)
元素的名称不是content
,而是encoded
; content:
是“名称空间前缀”,在文档顶部绑定到名称空间标识符"http://purl.org/rss/1.0/modules/content/"
。
因此,您需要使用the ->children()
method来选择正确的命名空间:
echo $item->children('http://purl.org/rss/1.0/modules/content/')->encoded;
(显然,您可能会将该命名空间标识符放入某个变量或常量中,以避免每次需要时将其粘贴。)
请注意,我在这里使用了echo
,而不是var_dump
; var_dump
不能很好地处理SimpleXML(反之亦然?),除此之外还会让它看起来像缺少CDATA内容。另一方面,echo
隐式地转换为字符串以获取内容,这很好。在实际代码中,您可能希望明确地获取该字符串内容,如下所示:
$encoded_content = (string) $item->children('http://purl.org/rss/1.0/modules/content/')->encoded;