public static JSONObject test(String xml) throws DocumentException {
Document doc = DocumentHelper.parseText(xml);
Element rootElement = doc.getRootElement();
Iterator transaction_header = rootElement.elementIterator("Transaction_Header");
Iterator transaction_body = rootElement.elementIterator("Transaction_Body");
JSONObject root = new JSONObject();
parseHeadXml(transaction_header, root);
parseBodyXml(transaction_body, root);
return root;
}
private static void parseHeadXml(Iterator transaction_header, JSONObject root) {
while (transaction_header.hasNext()) {
Element element = (Element)transaction_header.next();
List<Element> elements = element.elements();
JSONObject json = new JSONObject();
for (Element el : elements) {
String name = el.getName();
String text = el.getText();
List<Element> innerList = el.elements();
if (innerList.size() > 0) {
// 第二层循环
JSONObject jsonObject = new JSONObject();
innerList.forEach(item -> jsonObject.put(item.getName(), item.getText()));
json.put(el.getName(),jsonObject);
} else {
json.put(el.getName(), el.getText());
}
}
root.put("Transaction_Header",json);
}
}
private static void parseBodyXml(Iterator transaction_body, JSONObject root) {
while (transaction_body.hasNext()) {
Element element = (Element)transaction_body.next();
// response 下面存在数据
Iterator<Element> response = element.elementIterator("response");
JSONObject responseJson = new JSONObject();
while (response.hasNext()) {
Element next = response.next();
List<Element> elements = next.elements();
JSONObject json = new JSONObject();
for (Element el : elements) {
String name = el.getName();
String text = el.getText();
List<Element> innerList = el.elements();
if (innerList.size() > 0) {
// 第二层循环
JSONObject jsonObject = new JSONObject();
innerList.forEach(item -> jsonObject.put(item.getName(), item.getText()));
// 当存在相同key,则设置成数组
if (json.containsKey(el.getName())) {
Object o = json.get(el.getName());
if (o instanceof JSONObject) {
JSONArray array = new JSONArray();
array.add(o);
json.put(el.getName(),array);
} else if (o instanceof JSONArray) {
((JSONArray) o).add(jsonObject);
}
} else {
json.put(el.getName(),jsonObject);
}
} else {
json.put(el.getName(), el.getText());
}
}
responseJson.put("response",json);
}
root.put("Transaction_Body",responseJson);
}
}