php-当存在CDATA时,将xml转换为json不起作用
如果我使用以下php-当存在CDATA时,将xml转换为json不起作用,php,xml,json,Php,Xml,Json,如果我使用以下php代码将xml转换为json: <?php header("Content-Type:text/json"); $resultXML = " <QUERY> <Company>fcsf</Company> <Details> fgrtgrthtyfgvb </Details> </QUERY> "; $sxml = simplexml_load_string($re
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);
?>
但是,如果我在Details
元素中使用CDATA
,如下所示:
<?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);
在这种情况下,
Details
元素为空。知道为什么详细信息是空白的吗?以及如何更正这个问题吗?这是而不是JSON编码的问题–var\u dump($sxml->Details)
向您显示SimpleXML以前已经把它弄糟了,因为您只会得到它
object(SimpleXMLElement)#2 (0) {
}
–一个“空”的SimpleXMLElement,CDATA内容已经丢失
在我们了解了这一点之后,通过谷歌搜索“simplexml cdata”可以直接找到解决方案:
如果在simplexml文档中访问CDATA时遇到问题,则在使用simplexml加载CDATA之前,不需要str_replace/preg_替换CDATA
您可以这样做,所有CDATA内容将作为字符串合并到元素内容中
$xml=simplexml\u load\u文件($xmlfile,'simplexmlement',LIBXML\u NOCDATA)代码>
所以,使用
$sxml = simplexml_load_string($resultXML, 'SimpleXMLElement', LIBXML_NOCDATA);
在您的代码中,您将获得
{"Company":"fcsf","Details":"\n fgrtgrthtyfgvb\n "}
在JSON编码之后。您是否尝试删除它![CDATA[和]]之前$resultXML=str_replace(“”,,$resultXML);
$sxml = simplexml_load_string($resultXML, 'SimpleXMLElement', LIBXML_NOCDATA);
{"Company":"fcsf","Details":"\n fgrtgrthtyfgvb\n "}