通过以上代码,可以实现xml转json,把特定xml节点转换成json数组!
/**
* 转换一个xml格式的字符串到json格式
*
* @param xml
* xml格式的字符串
* @return 成功返回json 格式的字符串;失败反回null
*/
@SuppressWarnings("unchecked")
public static String xml2JSON(String xml) {
JSONObject obj = new JSONObject();
List list=new ArrayList();
try {
list.add("CustomerRemark");
list.add("UserRemark");
list.add("AccountRemark");
list.add("ProductInfo");
list.add("ProCompInfo");
list.add("BusiID");
list.add("SpclSvcInfo");
list.add("ActivityInfo");
list.add("ActPara");
list.add("FeeInfo");
InputStream is = new ByteArrayInputStream(xml.getBytes("utf-8"));
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(is);
Element root = doc.getRootElement();
obj.put(root.getName(), iterateElement(root,list));
return obj.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 转换一个xml格式的字符串到json格式
*
* @param file
* java.io.File实例是一个有效的xml文件
* @return 成功反回json 格式的字符串;失败反回null
*/
@SuppressWarnings("unchecked")
public static String xml2JSON(File file) {
JSONObject obj = new JSONObject();
List list=new ArrayList();
try {
//CustomerRemark,UserRemark,AccountRemark,ProductInfo,ProCompInfo,BusiID,SpclSvcInfo,ActivityInfo,ActPara,FeeInfo
list.add("CustomerRemark");
list.add("UserRemark");
list.add("AccountRemark");
list.add("ProductInfo");
list.add("ProCompInfo");
list.add("BusiID");
list.add("SpclSvcInfo");
list.add("ActivityInfo");
list.add("ActPara");
list.add("FeeInfo");
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(file);
Element root = doc.getRootElement();
obj.put(root.getName(), iterateElement(root,list));
return obj.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 一个迭代方法
*
* @param element
* : org.jdom.Element
* @return java.util.Map 实例
*/
@SuppressWarnings("unchecked")
private static Map iterateElement(Element element,List xlist) {
List jiedian = element.getChildren();
Element et = null;
Map obj = new HashMap();
List list = null;
for (int i = 0; i < jiedian.size(); i++) {
list = new LinkedList();
et = (Element) jiedian.get(i);
if (et.getTextTrim().equals("")) {
if (et.getChildren().size() == 0)
continue;
if (obj.containsKey(et.getName())) {
list = (List) obj.get(et.getName());
}
list.add(iterateElement(et,xlist));
if(xlist.contains(et.getName())){
obj.put(et.getName(), list);
}else{
obj.put(et.getName(), list.get(0));
}
} else {
if (obj.containsKey(et.getName())) {
list = (List) obj.get(et.getName());
}
list.add(et.getTextTrim());
if(xlist.contains(et.getName())){
obj.put(et.getName(), list);
}else{
obj.put(et.getName(), list.get(0));
}
}
}
return obj;
}