将webservice + xml 转成json
public class WsXMLUtil {
private static final String HEAD = "Response";
private static final String BODY = "body";
public static String parseStr(String xml)
throws DocumentException {
Document document = DocumentHelper.parseText(xml);
Element root = document.getRootElement();
Map<String, Object> xmlMap = parseElement(root);
List<Map<String,Object>> info = (List<Map<String, Object>>) xmlMap.get("info");
Map<String,Object> infoMap = info.get(0);
List<Map<String,Object>> bodyListMap = (List<Map<String, Object>>) infoMap.get("Body");
String massage = (String) bodyListMap.get(0).get("HIPMessageServiceResult");
return massage;
}
/**
* 解析XML字符串
*
* @param xml
* @return
* @throws DocumentException
*/
public static Map<String, Object> parseXmlStr(String xml)
throws DocumentException {
Document document = DocumentHelper.parseText(xml);
Element root = document.getRootElement();
Map<String, Object> xmlMap = parseElement(root);
List<Map<String,Object>> info = (List<Map<String, Object>>) xmlMap.get("info");
return info.get(0);
}
/**
* 解析Element
*
* @param root
* @return
*/
@SuppressWarnings("unchecked")
private static Map<String, Object> parseElement(Element root) {
String rootName = root.getName();
Iterator<Element> rootItor = root.elementIterator();
Map<String, Object> rMap = new HashMap<>();
List<Map<String, Object>> rList = new ArrayList<>();
Map<String, Object> rsltMap = null;
while (rootItor.hasNext()) {
Element tmpElement = rootItor.next();
String name = tmpElement.getName();
if (rsltMap == null || (!HEAD.equals(name) && !BODY.equals(name)
&& !tmpElement.isTextOnly())) {
if (!HEAD.equals(name) && !BODY.equals(name)
&& !tmpElement.isTextOnly() && rsltMap != null) {
rList.add(rsltMap);
}
rsltMap = new HashMap<>();
}
if (!tmpElement.isTextOnly()) {
Iterator<Element> headItor = tmpElement.elementIterator();
while (headItor.hasNext()) {
Element hElement = headItor.next();
if (hElement.isTextOnly()) {
rsltMap.put(hElement.getName(), hElement.getTextTrim());
} else {
rsltMap.putAll(parseElement(hElement));
}
}
}
}
rList.add(rsltMap);
rMap.put(rootName, rList);
return rMap;
}
}