如果我使用以下php
代码将xml
转换为json
:
<?php
header("Content-Type:text/json");
$resultXML = "
<QUERY>
<Company>fcsf</Company>
<Details>
fgrtgrthtyfgvb
</Details>
</QUERY>
";
$sxml = simplexml_load_string($resultXML);
echo json_encode($sxml);
?>
我得到了
{"Company":"fcsf","Details":"\n fgrtgrthtyfgvb\n "}
但是,如果我在CDATA
元素中使用Details
,如下所示:
<?php
header("Content-Type:text/json");
$resultXML = "
<QUERY>
<Company>fcsf</Company>
<Details><![CDATA[
fgrtgrthtyfgvb]]>
</Details>
</QUERY>
";
$sxml = simplexml_load_string($resultXML);
echo json_encode($sxml);
&GT;
我得到以下
{"Company":"fcsf","Details":{}}
在这种情况下,Details
元素为空。知道为什么Details
是空白的,以及如何纠正这个问题?
答案 0 :(得分:23)
这是不 JSON编码的问题 - var_dump($sxml->Details)
向您展示SimpleXML之前已经弄乱了它,因为您只会获得
object(SimpleXMLElement)#2 (0) {
}
- 一个“空”的SimpleXMLElement,那里已经缺少CDATA内容。
在之后我们想出来(好吧,你可能有,如果你只是正确地分析了问题 ),谷歌搜索“ simplexml cdata“直接引导我们the first user comment on the manual page on SimpleXML Functions,它有解决方案:
如果您在simplexml文档中访问CDATA时遇到问题,则在使用simplexml加载CDATA之前,不需要str_replace / preg_replace CDATA。
您可以改为执行此操作,并将所有CDATA内容作为字符串合并到元素内容中。
$xml = simplexml_load_file($xmlfile, 'SimpleXMLElement', LIBXML_NOCDATA);
所以,使用
$sxml = simplexml_load_string($resultXML, 'SimpleXMLElement', LIBXML_NOCDATA);
在您的代码中,您将获得
{"Company":"fcsf","Details":"\n fgrtgrthtyfgvb\n "}
在对JSON进行编码之后。