【问题标题】:Cannot retrieve the content of CDATA from XML API无法从 XML API 检索 CDATA 的内容
【发布时间】:2017-05-04 11:00:12
【问题描述】:

已尝试通过 XML API 在 PHP 中同时使用 simplexml_load_string()new SimpleXMLElement() 解析 XML 数据,但在解析 CDATA 内容时遇到问题。在 PHP 中使用上述函数或实例还应该将 CDATA 解析为节点的内容(通过将其类型转换为来自 SimpleXMLElementstring 或使用 LIBXML_NOCDATA 标志),但情况并非如此.相反,数据像<![CData[2801086]]> 一样出来(这需要一段时间才能注意到,因为在浏览器中回显它是不可见的,因为Cdata 将其隐藏在渲染中)

这是一个包含 API 提要中的工作职位的 sn-p(已精简并删除了一些内容):

<position>
  <Id><![CData[2801086]]></Id>
  <url>
  <![CData[http://foo.bar.co.uk/ViewVacancy.aspx?2801086-foo]]>
  </url>
  <JobReference><![CData[VAC-00117]]></JobReference>
  <JobTitle><![CData[Foo Bar]]></JobTitle>
  <County><![CData[Nottinghamshire]]></County>
  <Town><![CData[Nottingham]]></Town>
  <Postcode><![CData[NG11 0EE]]></Postcode>
</position>

【问题讨论】:

  • CDATA 必须大写。您编写它的方式,它不是格式良好的 XML。
  • 感谢迈克尔的反馈。是的,我知道(已在下面回答)。可惜不是我自己写的,所以需要让提供服务的开发者知道

标签: php xml xml-parsing


【解决方案1】:

这花费了很多时间,所以我想我会发布它以减轻其他人的痛苦。 PHP 中的simplexml_load_string()new SimpleXMLElement() 都要求Cdata 大写(即CDATA),而Web 浏览器(Chrome)没有它就很高兴。请注意,这可能会随着不同的版本而改变,我在撰写本文时使用的是 PHP 7。一旦大写,它就没有像预期的那样出现Cdata 包装。

【讨论】:

  • Chrome 是否将其解析为 HTML? HTML 不区分大小写,XML 是。
  • 这就解释了。当浏览器按应有的解释它并且 PHP 没有抛出任何异常时,我的眼睛在它上面呆了一会儿。
猜你喜欢
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 2011-01-17
相关资源
最近更新 更多