2017-05-04 101 views
0

已尝试使用PHP中的simplexml_load_string()new SimpleXMLElement()从XML API解析XML数据,但我在解析CDATA内容时遇到问题。在PHP中使用上述函数或实例还应解析CDATA作为节点的内容(通过将其从SimpleXMLElement中类型化为string或使用LIBXML_NOCDATA标志),但情况并非如此。相反,数据出来像<![CData[2801086]]>(这花了一段时间发现在浏览器中回荡,这是不可见,因为Cdata从渲染隐藏它)无法从XML API检索CDATA的内容

下面是一个包含了API饲料内的工作位置的片断(已下调并删除了一些内容):

<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> 
+1

CDATA必须写成大写。你写它的方式,它不是格式良好的XML。 –

+0

感谢您的反馈迈克尔。是的,我知道(已经在下面回答了)。不幸的是,我自己写的,所以需要让提供服务的开发人员知道 – willsquire

回答

0

这消耗了很多小时,所以我认为我会发布它来拯救别人的痛苦。 PHP中的simplexml_load_string()new SimpleXMLElement()都需要大写Cdata(即CDATA),而Web浏览器(Chrome)在没有它的情况下很高兴。请注意,这可能会因不同的版本而有所不同,我在撰写本文时使用PHP 7。一旦大写,它就会像预期的那样没有Cdata包装。

+0

Chrome是否将其解析为HTML? HTML不区分大小写,XML是。 – ThW

+0

解释它。当浏览器解释它,因为它应该和PHP没有抛出任何例外,我的眼睛瞥了一会儿。 – willsquire