java XML解析成Map

Posted 秀川

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java XML解析成Map相关的知识,希望对你有一定的参考价值。

1.需要解析的文件.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <request>
 3     <realName>test</realName>
 4     <identityNumber>411525152242417185276</identityNumber>
 5     <phone>1314456788</phone>
 6     <user>
 7         <value>1444444</value>
 8         <name>12334</name>
 9             <aa>
10                 <hehe>222222</hehe>
11             </aa>
12         <age>23</age>
13     </user>
14 </request>

2.工具包

 1 package com.ynet.utils;
 2 
 3 import org.dom4j.Document;
 4 import org.dom4j.Element;
 5 
 6 import java.util.*;
 7 
 8 /**
 9  * Created by Arya on 2017/11/3.
10  */
11 public class XmlUtils {
12     public static Map<String, Object> Dom2Map(Document doc) {
13         Map<String, Object> map = new HashMap<String, Object>();
14         if (doc == null)
15             return map;
16         Element root = doc.getRootElement();
17         for (Iterator iterator = root.elementIterator(); iterator.hasNext(); ) {
18             Element e = (Element) iterator.next();
19             List list = e.elements();
20             if (list.size() > 0) {
21                 map.put(e.getName(), Dom2Map(e));
22             } else
23                 map.put(e.getName(), e.getText());
24         }
25         return map;
26     }
27 
28 
29     public static Map Dom2Map(Element e) {
30         Map map = new HashMap();
31         List list = e.elements();
32         if (list.size() > 0) {
33             for (int i = 0; i < list.size(); i++) {
34                 Element iter = (Element) list.get(i);
35                 List mapList = new ArrayList();
36 
37                 if (iter.elements().size() > 0) {
38                     Map m = Dom2Map(iter);
39                     if (map.get(iter.getName()) != null) {
40                         Object obj = map.get(iter.getName());
41                         if (!obj.getClass().getName().equals("java.util.ArrayList")) {
42                             mapList = new ArrayList();
43                             mapList.add(obj);
44                             mapList.add(m);
45                         }
46                         if (obj.getClass().getName().equals("java.util.ArrayList")) {
47                             mapList = (List) obj;
48                             mapList.add(m);
49                         }
50                         map.put(iter.getName(), mapList);
51                     } else
52                         map.put(iter.getName(), m);
53                 } else {
54                     if (map.get(iter.getName()) != null) {
55                         Object obj = map.get(iter.getName());
56                         if (!obj.getClass().getName().equals("java.util.ArrayList")) {
57                             mapList = new ArrayList();
58                             mapList.add(obj);
59                             mapList.add(iter.getText());
60                         }
61                         if (obj.getClass().getName().equals("java.util.ArrayList")) {
62                             mapList = (List) obj;
63                             mapList.add(iter.getText());
64                         }
65                         map.put(iter.getName(), mapList);
66                     } else
67                         map.put(iter.getName(), iter.getText());
68                 }
69             }
70         } else
71             map.put(e.getName(), e.getText());
72         return map;
73     }
74 }

3.控制器

 1 package com.ynet.controller;
 2 
 3 
 4 import com.ynet.utils.XmlUtils;
 5 import org.dom4j.Document;
 6 import org.dom4j.DocumentHelper;
 7 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 8 import org.springframework.web.bind.annotation.RequestMapping;
 9 import org.springframework.web.bind.annotation.RestController;
10 
11 import org.dom4j.DocumentException;
12 
13 import java.io.FileInputStream;
14 import java.io.IOException;
15 import java.util.Map;
16 
17 /**
18  * Created by Arya on 2017/11/3.
19  */
20 @RestController
21 @EnableAutoConfiguration
22 public class XmlDemoController {
23     @RequestMapping(value="/xmlDemo")
24     public Map<String, Object> xmlDocumentFile(){
25         Document doc = null;
26         try {
27             FileInputStream fis = new FileInputStream("F:\\\\myweb\\\\gateway\\\\gateway2\\\\src\\\\main\\\\resources\\\\customer.xml");
28             byte[] b = new byte[fis.available()];
29             fis.read(b);
30             String str = new String(b);
31             doc = DocumentHelper.parseText(str);
32         } catch (IOException e) {
33             e.printStackTrace();
34         } catch (DocumentException e) {
35             e.printStackTrace();
36         }
37 
38         return XmlUtils.Dom2Map(doc);
39     }
40 }

4.postman测试结果

 

以上是关于java XML解析成Map的主要内容,如果未能解决你的问题,请参考以下文章

[Java] Java解析XML格式Response后组装成Map

java解析xml字符串 后 组装成map形式,求大神

Java文件解析xml文件转成 map

怎么用java解析xml中entity

java 怎么读取resource properties 并且解析成map

从流输入中解析没有根元素的 XML 片段列表