<specialty nameCN="電測">
<step>
<signer staffID="800706" nameCN=""><![CDATA[]]></signer>
</step>
<step>
<signer staffID="090477" nameCN=""><![CDATA[]]></signer>
</step>
</specialty>
<specialty nameCN="節能">
<step>
<signer staffID="800608" nameCN=""><![CDATA[]]></signer>
<signer staffID="800808" nameCN=""><![CDATA[]]></signer>
</step>
<step>
<signer staffID="800602" nameCN=""><![CDATA[]]></signer>
<signer staffID="800803" nameCN=""><![CDATA[]]></signer>
</step>
</specialty>
通過xmlSerializer.read(xml).toString();
轉換結果:
{
"@nameCN": "電測",
"step": [
{
"signer": {
"@staffID": "800706",
"@nameCN": "",
"#cdata-section":
}
},
{
"signer": {
"@staffID": "090477",
"@nameCN": "",
"#cdata-section":
}
}
]
},
{
"@nameCN": "節能",
"step": [
{
"signer": [
{
"@staffID": "800608",
"@nameCN": "",
"#cdata-section":
},
{
"@staffID": "800808",
"@nameCN": "",
"#cdata-section":
}
]
},
{
"signer": [
{
"@staffID": "800602",
"@nameCN": "",
"#cdata-section":
},
{
"@staffID": "800803",
"@nameCN": "",
"#cdata-section":
}
]
}
]
}
uj5u.com熱心網友回復:
上面的結果 用紅色標記出來的就是差別,step下有多個signer節點時,輸出結果signer是陣列,只有1個signer節點 輸出signer不是陣列,如何在只有一個signer節點時也輸出為陣列
uj5u.com熱心網友回復:
改元碼?想不到別的啥辦法ε=(′ο`*)))~uj5u.com熱心網友回復:
之前也有人遇到這種問題,只有一個附上了方法:
有一個方案,但不在好,也就是把xml先反序列化,反序列化時要寫類來反序列化,然后再序列化成json。
在頁面用一個插件檢驗節點是否為陣列,不是則轉為陣列;
但是我這個是別人后臺請求我的介面
uj5u.com熱心網友回復:
博主,有轉換的代碼提供嗎,我xml轉json的時候 cdata部分直接顯示里面內容 而沒有cdata標識。uj5u.com熱心網友回復:
推測是XML未格式化導致的。自己測驗過,如果是自己模擬提交標準xml格式,用流讀進來就沒事,就不會出現陣列誤轉物件問題。如果別人提交是一行字串就會轉換例外。拿你的xml字串過下這個方法就好了public static String formatXML(String xml) {
String requestXML = null;
try {
// 拿取決議器
SAXReader reader = new SAXReader();
Document document = reader.read(new StringReader(xml));
if (null != document) {
StringWriter stringWriter = new StringWriter();
// 格式化,每一級前的空格
OutputFormat format = new OutputFormat(" ", true);
// xml宣告與內容是否添加空行
format.setNewLineAfterDeclaration(false);
// 是否設定xml宣告頭部
format.setSuppressDeclaration(false);
// 是否分行
format.setNewlines(true);
XMLWriter writer = new XMLWriter(stringWriter, format);
writer.write(document);
writer.flush();
writer.close();
requestXML = stringWriter.getBuffer().toString();
}
return requestXML;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/229983.html
標籤:Web 開發
