xml转成Map
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
public class test {
public static void main(String[] args) {
String xml = "<person>" +
"<name>James</name>" +
"<addr>南京</addr>" +
"<sex>男</sex>" +
"<work><detail>北京圆心</detail><arg>hhhh</arg></work>" +
"</person>";
SAXReader saxReader = new SAXReader();
ByteArrayInputStream byteArrayInputStream = null;
try {
byteArrayInputStream = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8));
Document read = saxReader.read(byteArrayInputStream);
Element rootElement = read.getRootElement();
List<Element> list = (List<Element>)rootElement.elements();
for (Element element : list) {
System.out.println("===================="+ element.getText());
}
System.out.println("方法一//");
Map<String, Object> map = Dom2Map(read);
JSONObject json = new JSONObject(map);
System.out.println(json);
System.out.println("方法二//");
Map<String, Object> map2 = xmlToMap(xml, "utf-8");
JSONObject json2 = new JSONObject(map2);
System.out.println(json2);
} catch (Exception e) {
e.printStackTrace();
}finally {
if (byteArrayInputStream != null){
try {
byteArrayInputStream.close();
} catch (IOException e) {
}
}
}
}
public static Map<String, Object> xmlToMap(String xml, String charset) throws UnsupportedEncodingException, DocumentException{
Map<String, Object> respMap = new HashMap<>();
SAXReader reader = new SAXReader();
Document doc = reader.read(new ByteArrayInputStream(xml.getBytes(charset)));
Element root = doc.getRootElement();
for (Iterator iterator = root.elementIterator(); iterator.hasNext();) {
Element e = (Element) iterator.next();
xmlToMap(e, respMap);
}
return respMap;
}
public static Map<String, Object> xmlToMap(Element tmpElement, Map<String, Object> respMap){
if (tmpElement.isTextOnly()) {
respMap.put(tmpElement.getName(), tmpElement.getText());
}else {
Map<String, Object> resListMap = new HashMap<>();
@SuppressWarnings("unchecked")
Iterator<Element> eItor = tmpElement.elementIterator();
while (eItor.hasNext()) {
Element element = eItor.next();
xmlToMap(element, resListMap);
}
respMap.put(tmpElement.getName(),resListMap);
}
return respMap;
}
public static Map<String, Object> Dom2Map(Document doc) {
Map<String, Object> map = new HashMap<>();
if (doc == null)
return map;
Element root = doc.getRootElement();
for (Iterator iterator = root.elementIterator(); iterator.hasNext();) {
Element e = (Element) iterator.next();
List list = e.elements();
if (list.size() > 0) {
map.put(e.getName(), Dom2Map(e));
} else
map.put(e.getName(), e.getText());
}
return map;
}
@SuppressWarnings("unchecked")
public static Map Dom2Map(Element e) {
Map map = new HashMap();
List list = e.elements();
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Element iter = (Element) list.get(i);
List mapList = new ArrayList();
if (iter.elements().size() > 0) {
Map m = Dom2Map(iter);
if (map.get(iter.getName()) != null) {
Object obj = map.get(iter.getName());
if (!obj.getClass().getName()
.equals("java.util.ArrayList")) {
mapList = new ArrayList();
mapList.add(obj);
mapList.add(m);
}
if (obj.getClass().getName()
.equals("java.util.ArrayList")) {
mapList = (List) obj;
mapList.add(m);
}
map.put(iter.getName(), mapList);
} else
map.put(iter.getName(), m);
} else {
if (map.get(iter.getName()) != null) {
Object obj = map.get(iter.getName());
if (!obj.getClass().getName()
.equals("java.util.ArrayList")) {
mapList = new ArrayList();
mapList.add(obj);
mapList.add(iter.getText());
}
if (obj.getClass().getName()
.equals("java.util.ArrayList")) {
mapList = (List) obj;
mapList.add(iter.getText());
}
map.put(iter.getName(), mapList);
} else
map.put(iter.getName(), iter.getText());
}
}
} else
map.put(e.getName(), e.getText());
return map;
}
}