废话不说,直接上代码,下面第一个方法实现了xml转换为json数据,第二个实现json转为xml
public class XmlAndJson {
public JSONObject xml2Obj(Elementelement) {
JSONObject returnObj =new JSONObject();
JSONObject rootObj =new JSONObject();
List<?> attrs = element.attributes();
List<?> childs = element.elements();
//属性
JSONObject attrObj =new JSONObject();
for (Object object : attrs) {
Attribute attr = (Attribute)object;
attrObj.put(attr.getName(),attr.getValue());
}
rootObj.put("attrs",attrObj);
//子节点
JSONArray childArray =new JSONArray();
for (Object child : childs) {
childArray.add(xml2Obj((Element)child));
}
rootObj.put("childs",childArray);
//叶子节点,文本
if (childs.isEmpty()) {
rootObj.put("text",element.getText());
}
//返回值包裹处理
returnObj.put(element.getName(),rootObj);
returnreturnObj;
}
public Element obj2Xml(JSONObjectobj)throws Exception {
if (obj.keySet().size() > 1) {
thrownew Exception("json数据最外层必须为只有一个key, 代表根节点");
}
String rootKey = (String)obj.keySet().toArray()[0];
Element rootEle = DocumentHelper.createElement(rootKey);
JSONObject rootObj =obj.getJSONObject(rootKey);
JSONObject attrsObj =rootObj.getJSONObject("attrs");
for (String attrKey : attrsObj.keySet()) {
rootEle.addAttribute(attrKey,attrsObj.getString(attrKey));
}
JSONArray childs =rootObj.getJSONArray("childs");
if(childs.isEmpty()) {
String text =rootObj.getString("text");
if (text !=null) {
rootEle.setText(text);
}
}
for (Object child : childs) {
rootEle.add(obj2Xml((JSONObject)child));
}
returnrootEle;
}
}
public class Test {
public staticvoid main(String[]args)throws DocumentException, FileNotFoundException {
SAXReader reader =new SAXReader();
Document document =reader.read(new FileInputStream(new File("此处是你的xml文件路径")));
XmlAndJson parser =newXmlAndJson();
JSONObject object =parser.parse(document.getRootElement());
System.out.println(object.toJSONString());
try {
System.out.println(parser.obj2Xml(object).asXML());
} catch (Exceptione) {
e.printStackTrace();
}
}
}