使用SimpleXMLElement读取`<![CDATA [...]]>`中的文本

4 php xml simplexml cdata

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

<item>
<title><![CDATA[...title...]]></title>
<link>...url...</link>
<description><![CDATA[...title...]]></description>
<pubDate>...date...</pubDate>
<guid>...link...</guid>
</item>
Run Code Online (Sandbox Code Playgroud)

当我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..."
  }
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得的价值 <![CDATA[...]]>读取来自饲料中的标题和描述?

IMS*_*SoP 13

SimpleXML绝对可以读取CDATA节点.您遇到的唯一问题是print_r,var_dump和类似的功能不给的SimpleXML对象的精确表示,因为他们没有在PHP中全面实施.

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

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

另请参阅我之前的回答,网址/sf/answers/968139161/