簡體   English   中英

php - 當有 CDATA 時,將 xml 轉換為 json 不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM