xml递归解析成Map
来源:互联网 发布:java写接口供别人调用 编辑:程序博客网 时间:2024/06/06 05:48
实用场景
在做WebService传输交互的时候 我们基本采用SOAP 1.0以上协议,用XML作为服务开发传输约束。
问题产生
在我们接收和返回数据以及实际应用开发时候并不能直接在XML上进行关键字段的获取和处理。比如:
<?xml version='1.0' encoding='UTF-8'?><messages ><heartbeat>0</heartbeat><switchset><authority><authoritytype>0</authoritytype><username/><userpwd/><license/></authority><visitor><sourceorgan>3301050000000000000000</sourceorgan><sourcedomain>3301000012</sourcedomain></visitor><serviceinf><servicecode>10050101 </servicecode></serviceinf><provider><targetorgan/><targetdomain/></provider><route/><process/></switchset><business><standardcode>REQ.E0104.0201.001</standardcode><requestset><reqcondition><condition><WS08_10_052_01>47024049833010512B1001</WS08_10_052_01><WS06_00_940_01>20160518</WS06_00_940_01><WS06_00_940_02>20160519</WS06_00_940_02></condition></reqcondition><reqpaging>1</reqpaging><reqpageindex>1</reqpageindex><reqpageset>5</reqpageset></requestset><datacompress>0</datacompress><daqtaskid/><businessdata> </businessdata></business><extendset/></messages>这XML就是标准的按照总线ESB模式传输,里面包括很多业务规范字段。如果直接在上面进行截取的话代码会变得很乱,很不规范。由此我们能不能先把它转化为我们通熟易懂的Map<key,value> 形式呢?
实战演练
为了方便理解,我们从简单的开始分析
<request> --------------------------------第一个map 的key值 ,以下的结构体都是Value<body> ----------------------------第一个map的value中第一个Map中的kay 到</body>为止都是value<jgid>330105104</jgid>-----第一个map的value中第一个Map中value中的 第一个map<sqid>11327203</sqid><yllb>1</yllb><jclb>3</jclb><djbz>1</djbz><brxm>王</brxm></body><data> ------------------------------第一个map的value中第二个Map中的kay 到</data>为止都是value<data1>A1</data1>----------第一个map的value中第二个Map中的value的第二个map<data2>A2</data2><data3>A3</data3><data4>A4</data4></data>
</request>很显然外面这个最大的Map是由递归生成
最大的Map 0 :key={"request",value={body,data}}
data1,data2...data4--->data; key="data" ,value={ data1={A1},data2={A2},data3={A3},data4={A4} }
body也是如此
body也是如此
/** * xml字符串解析成map集合 * * @param s * @return */public Map<String, Object> xmlParseMap(String s) {Element root = null;try {//把Stirng XML格式型转为标准的Document类型 Document doc = DocumentHelper.parseText(s);//获取根节点root = doc.getRootElement();} catch (DocumentException e) {e.printStackTrace();}//new HashMap<String, Object>() 在这个map下新建子节点的map储存return getText(root, new HashMap<String, Object>());}
/** * xml 获取 Map * @param e * @param map * @return */private Map<String, Object> getText(Element e,Map<String, Object> map) {Map<String, Object> mapA = new HashMap<String, Object>();//mapA 每个节点存当前节点所对应的所有子节点 ---核心思想Imap.put(e.getName(), mapA);Iterator<Element> it = e.elementIterator();while (it.hasNext()) {Map<String, Object> m = new HashMap<String, Object>();Element el = it.next();if (el.elements().size() != 0) {//如果还有 则递归 思想Im = getText(el, m);} else {m.put(el.getName(), el.getText());}//把子节点所对应的map 返回给父节点mapA.putAll(m);}return map;}
OK 大功告成
阅读全文
0 0
- xml递归解析成Map
- XML解析成Map
- 将xml解析成map
- 解析字符串XML成map
- 解析xml 转换map
- dom4j递归解析xml
- 解析 XML文件 到哈希MAP
- xml解析返回list<map>
- java解析xml转为Map
- Java Dom 递归解析XML
- golang xml 递归嵌套解析
- 递归方式解析xml文档
- 用递归方法解析XML
- 从请求中获取xml内容并解析成map
- 简单的xslt递归解析xml成 tree
- **解析各类xml为map工具类**
- 递归实现DOM解析任何XML文档
- 递归方式 DOM 解析(parse) XML
- 关于eclipse中启动ONE仿真的配置
- BZOJ 1001 狼抓兔子
- PHP底层工作原理
- hdu2600
- Linux进程空间与虚拟地址的好处
- xml递归解析成Map
- kaldi 在线中文识别系统搭建
- 一致性模型
- winSCP使用
- Angular的自动化测试
- SSH
- git tag版本代码快速修复
- Servlet的基础概念
- spring JPA集成Junit单元测试