- 此问题在此处已有答案**:
[PHP: How to handle <![CDATAwith SimpleXMLElement?(6个答案)
Reference - How do I handle Namespaces (Tags and Attributes with a Colon in their Name) in SimpleXML?(2个答案)
七年前就关门了。
问题
如果您尝试访问RSS提要中的<content:encoded>
,结果将为空。
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
}
问题
如何访问内容并保存<p>content</p>
?
1条答案
按热度按时间yx2lnoni1#
元素的名称不是
content
,而是encoded
;content:
是“命名空间前缀”,在文档的顶部绑定到命名空间标识符"http://purl.org/rss/1.0/modules/content/"
。因此,您需要使用the
->children()
method来选择正确的名称空间:(显然,您可能会将名称空间标识符放入某个变量或常量中,以避免每次需要时都粘贴它。)
注意,这里我使用的是
echo
,而不是var_dump
;var_dump
不能很好地科普SimpleXML(反之亦然?),并且会使它看起来像是丢失了CDATA内容。另一方面,echo
隐式转换为string以获取内容,这可以正常工作。在真实的代码中,您可能希望显式获取字符串内容,如下所示: