4

我正在用SimpleXMLElementPHP 导入 RSS 提要。我的标题和描述有问题。出于某种原因,我从中获取提要的网站将标题和描述放在<![CDATA[...]]>

<item>
<title><![CDATA[...title...]]></title>
<link>...url...</link>
<description><![CDATA[...title...]]></description>
<pubDate>...date...</pubDate>
<guid>...link...</guid>
</item>

当我var_dump()对 SimpleXMLElement 执行操作时,我得到(对于这部分):

  [2]=>
  object(SimpleXMLElement)#5 (5) {
    ["title"]=>
    object(SimpleXMLElement)#18 (0) {
    }
    ["link"]=>
    string(95) "...link..."
    ["description"]=>
    object(SimpleXMLElement)#19 (0) {
    }
    ["pubDate"]=>
    string(31) "...date..."
    ["guid"]=>
    string(48) "...link..."
  }

如何获取值 <![CDATA[...]]>从提要中读取标题和描述?

4

1 回答 1

15

SimpleXML 绝对可以很好地读取 CDATA 节点。您遇到的唯一问题是print_rvar_dump和类似函数不能准确表示 SimpleXML 对象,因为它们没有在 PHP 中完全实现。

如果你运行echo $myNode->description你会看到 CDATA 部分的内容就好了。原因是当您要求将 SimpleXMLElement 转换为字符串时,它会自动为您组合所有文本和 CDATA 内容 - 但在您这样做之前,它会记住区别。

作为一般情况,要提取 SimpleXML 中任何元素或属性的字符串内容,请使用(string)$myNode. 这还可以防止其他问题,例如函数在期望字符串时抱怨获取对象,或者在保存到会话时无法序列化。

另请参阅我之前在https://stackoverflow.com/a/13830559/157957的回答

于 2013-05-30T17:28:59.953 回答