如果我使用以下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);
?>
Run Code Online (Sandbox Code Playgroud)
我明白了
{"Company":"fcsf","Details":"\n fgrtgrthtyfgvb\n "}
Run Code Online (Sandbox Code Playgroud)
但是,如果我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);
Run Code Online (Sandbox Code Playgroud)
?>
我得到以下内容
{"Company":"fcsf","Details":{}}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Details元素是空白的.知道为什么Details是空白以及如何纠正这个问题?
CBr*_*roe 25
这不是 JSON编码的问题 - var_dump($sxml->Details)向您展示SimpleXML之前已经搞砸了,因为您只会得到它
object(SimpleXMLElement)#2 (0) {
}
Run Code Online (Sandbox Code Playgroud)
- 一个"空"的SimpleXMLElement,那里已经缺少CDATA内容.
在我们想出来之后(好吧,你可以,如果你只是正确地分析了问题),谷歌搜索"simplexml cdata"引导我们直接到SimpleXML函数手册页上的第一个用户评论,它有解决方案:
如果您在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);
Run Code Online (Sandbox Code Playgroud)
在你的代码中,你会得到
{"Company":"fcsf","Details":"\n fgrtgrthtyfgvb\n "}
Run Code Online (Sandbox Code Playgroud)
经过JSON编码后.
| 归档时间: |
|
| 查看次数: |
6506 次 |
| 最近记录: |