【问题标题】:Reading text in `<![CDATA[...]]>` with SimpleXMLElement [duplicate]使用 SimpleXMLElement 读取 `<![CDATA[...]]>` 中的文本 [重复]
【发布时间】:2013-05-30 11:45:13
【问题描述】:

我在 PHP 中使用 SimpleXMLElement 导入 RSS 提要。我的标题和描述有问题。出于某种原因,我从中获取提要的网站将标题和描述放在&lt;![CDATA[...]]&gt;

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

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

  [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..."
  }

我如何获得 in &lt;![CDATA[...]]&gt; 的值以从提要中读取标题和描述?

【问题讨论】:

    标签: php xml simplexml cdata


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-10-27
      • 2013-07-05
      • 2023-03-05
      • 2011-09-09
      • 2011-02-27
      • 1970-01-01
      相关资源
      最近更新 更多