部分代码参考:https://blog.csdn.net/CDWLX/article/details/119038509
工具类
public class XmlMutualConversionJsonUtil {
/**
* 测试的main方法
*/
public static void main(String[] args) throws Exception {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<root>"
+ " <mdcardno>查询卡号</mdcardno>"
+ " <count>返回明细条数</count>"
+ " <rd1>"
+ " <test>"
+ " <trxzone>交易地区号1</trxzone>"
+ " <trxcurr>交易币种1</trxcurr>"
+ " </test>"
+ " </rd1>"
+ " <rd>"
+ " <trxzone>交易地区号2</trxzone>"
+ " <trxcurr>交易币种2</trxcurr>"
+ " </rd>"
+ " <rd>"
+ " <trxzone>交易地区号3</trxzone>"
+ " <trxcurr>交易币种3</trxcurr>"
+ "</rd>"
+ "</root>";
JSONObject jsonObject =toJson(xml);
System.out.println(jsonObject);
System.out.println("----------------");
Element root=new BaseElement("root");
Element element = toXml(jsonObject.toJSONString(), root);
System.out.println(element.asXML());
}
public static JSONObject toJson(String xml){
JSONObject jsonObject = new JSONObject();
Document document = null;
try {
document = DocumentHelper.parseText(xml);
} catch (DocumentException e) {
e.printStackTrace();
}
//获取根节点元素对象
Element root = document.getRootElement();
return xmlToJson(root,jsonObject);
}
public static JSONObject xmlToJson(Element node,JSONObject json){
//获取子节点list
List<Element> list = node.elements();
//获取节点名字
String name = node.getName();
//最下面的一层
if(list.isEmpty()){
String nodeValue = node.getTextTrim();
json.put(name, nodeValue);
}else{
//下级节点进行嵌套
JSONObject js = new JSONObject();
//判断json数据中是否存在相同的 key
//存在相同的key需要使用数组存储
if(json.containsKey(name)){
JSONArray jsonArray = null;
Object o = json.get(name);
if(o instanceof JSONArray){
jsonArray=(JSONArray) o;
}else{
jsonArray = new JSONArray();
jsonArray.add(o);
}
json.put(name,jsonArray);
jsonArray.add(js);
}else {
json.put(name,js);
}
//递归
for (Element element : list) {
xmlToJson(element,js);
}
}
return json;
}
/**
* 将json字符串转换成xml
*
* @param json
* json字符串
* @throws Exception
*/
public static Element toXml(String json,Element root) {
JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();
Element ee = jsonToXml(jsonObject, root, null);
return ee.elements().get(0);
}
/**
* 将json字符串转换成xml
*
* @param jsonElement
* 待解析json对象元素
* @param parentElement
* 上一层xml的dom对象
* @param name
* 父节点
*/
public static Element jsonToXml(JsonElement jsonElement, Element parentElement, String name) {
if (jsonElement instanceof JsonArray) {
//是json数据,需继续解析
JsonArray sonJsonArray = (JsonArray)jsonElement;
for (int i = 0; i < sonJsonArray.size(); i++) {
JsonElement arrayElement = sonJsonArray.get(i);
jsonToXml(arrayElement, parentElement, name);
}
}else if (jsonElement instanceof JsonObject) {
//说明是一个json对象字符串,需要继续解析
JsonObject sonJsonObject = (JsonObject) jsonElement;
Element currentElement = null;
if (name != null) {
currentElement = parentElement.addElement(name);
}
Set<Map.Entry<String, JsonElement>> set = sonJsonObject.entrySet();
for (Map.Entry<String, JsonElement> s : set) {
jsonToXml(s.getValue(), currentElement != null ? currentElement : parentElement, s.getKey());
}
} else {
//说明是一个键值对的key,可以作为节点插入了
Element el = parentElement.addElement(name);
el.addText(jsonElement.getAsString());
}
return parentElement;
}
}
依赖 jar包
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>