[英]php - converting xml to json does not work when there is CDATA
如果我使用以下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 "}
但是,如果我在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);
?>
我得到以下
{"Company":"fcsf","Details":{}}
在這種情況下, Details
元素為空。 知道為什么Details
為空白以及如何更正嗎?
這不是JSON 編碼的問題var_dump($sxml->Details)
表明 SimpleXML 之前已經把它搞砸了,因為你只會得到
object(SimpleXMLElement)#2 (0) {
}
– 一個“空”的 SimpleXMLElement,CDATA 內容已經在那里丟失了。
在我們弄清楚這一點之后,在谷歌上搜索“simplexml cdata”將我們直接帶到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 編碼之后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.