Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php-当存在CDATA时,将xml转换为json不起作用_Php_Xml_Json - Fatal编程技术网

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