效果

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <SERVICE>
  3. <SERVICE_HEADER>
  4. <apple>苹果大苹果小苹果好吃的不得了</apple>
  5. </SERVICE_HEADER>
  6. <SERVICE_BODY>
  7. <INFORMATION>
  8. <USER>
  9. <NAME>姚明多大</NAME>
  10. <AGE>?</AGE>
  11. </USER>
  12. <USER>
  13. <NAME>姚明多高</NAME>
  14. <AGE>反正比你高</AGE>
  15. </USER>
  16. </INFORMATION>
  17. </SERVICE_BODY>
  18. </SERVICE>

测试代码

  1. package com.sunline.nfs.process;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.File;
  5. import java.io.FileReader;
  6. import java.io.IOException;
  7. import java.io.StringWriter;
  8. import java.util.LinkedHashMap;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.Properties;
  12.  
  13. import net.sf.json.JSONArray;
  14. import net.sf.json.JSONObject;
  15.  
  16. import org.apache.velocity.Template;
  17. import org.apache.velocity.VelocityContext;
  18. import org.apache.velocity.app.Velocity;
  19. import org.apache.velocity.app.VelocityEngine;
  20. import org.dom4j.Attribute;
  21. import org.dom4j.Document;
  22. import org.dom4j.DocumentException;
  23. import org.dom4j.DocumentHelper;
  24. import org.dom4j.Element;
  25. import org.springframework.core.io.ClassPathResource;
  26. import org.springframework.core.io.Resource;
  27.  
  28. public class velocityxml {
  29. static Map<String,Object> jsonMap = new LinkedHashMap<String,Object>();
  30.  
  31. public static Map recursinMap(Map<String,Object> map){
  32. net.sf.json.JSONObject jObject = new net.sf.json.JSONObject();
  33. for(String key:map.keySet()){
  34. String str = map.get(key).toString();
  35. if(str.startsWith("{")){
  36. /*com.alibaba.fastjson.JSONObject jObject = JSON.parseObject(str);*/
  37. Map<String,Object> map2 = jObject.fromObject(str);
  38. if(!map.toString().endsWith(map2.toString()+"}")){
  39. int i = map.toString().indexOf(map2.toString())+;
  40. String value ="{" + map.toString().substring((i+map2.toString().length()),map.toString().length());
  41. map2.put(key, value);
  42. }
  43. return recursinMap(map2);
  44. }
  45. else{
  46. if(str.startsWith("[")){
  47. JSONArray tmpMaps = JSONArray.fromObject(str);
  48. jsonMap.put(key, tmpMaps);
  49. }
  50. else{
  51. jsonMap.put(key, str);
  52. }
  53. }
  54. }
  55. return jsonMap;
  56. }
  57. @SuppressWarnings("null")
  58. public static void main(String[] args) throws IOException{
  59. String filename = "partten.txt";
  60. String json = readJson(filename);
  61. json = xmlToJson(json);
  62. net.sf.json.JSONObject jObject = new net.sf.json.JSONObject();
  63. Map<String,Object> tmpmap = jObject.fromObject(json);
  64. Map<String,Object> map = recursinMap(tmpmap);
  65. //初始化参数
  66. Properties properties=new Properties();
  67. //设置velocity资源加载方式为class
  68. properties.setProperty("resource.loader", "class");
  69. //设置velocity资源加载方式为file时的处理类
  70. properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
  71. //实例化一个VelocityEngine对象
  72. VelocityEngine velocityEngine=new VelocityEngine(properties);
  73.  
  74. //实例化一个VelocityContext
  75. VelocityContext context=new VelocityContext();
  76. for(Object key :jsonMap.keySet()){
  77. context.put((String)key, jsonMap.get(key));
  78. }
  79. //实例化一个StringWriter
  80. StringWriter writer=new StringWriter();
  81. velocityEngine.mergeTemplate("patternxml.txt", "gbk", context, writer);
  82. String str = writer.toString();
  83. str = str.replaceAll("\\s*", "");
  84. System.out.println(str);
  85.  
  86. }
  87. public static String readJson(String filename){
  88. Resource resource =new ClassPathResource(filename);
  89. File file;
  90. try {
  91. file = resource.getFile();
  92. BufferedReader reader= new BufferedReader(new FileReader(file));
  93. String temp=null;
  94. String str="";
  95. while((temp=reader.readLine())!=null){
  96. str = str + temp;
  97. }
  98. return str;
  99. } catch (IOException e) {
  100. e.printStackTrace();
  101. }
  102.  
  103. return null;
  104. }
  105.  
  106. public static void dom4j2Json(Element element, JSONObject json) {
  107. // 如果是属性
  108. for (Object o : element.attributes()) {
  109. Attribute attr = (Attribute) o;
  110. if (!isEmpty(attr.getValue())) {
  111. json.put("@" + attr.getName(), attr.getValue());
  112. }
  113. }
  114. List<Element> chdEl = element.elements();
  115. if (chdEl.isEmpty() && !isEmpty(element.getText())) {// 如果没有子元素,只有一个值
  116. json.put(element.getName(), element.getText());
  117. }
  118.  
  119. for (Element e : chdEl) {// 有子元素
  120. if (!e.elements().isEmpty()) {// 子元素也有子元素
  121. JSONObject chdjson = new JSONObject();
  122. dom4j2Json(e, chdjson);
  123. Object o = json.get(e.getName());
  124. if (o != null) {
  125. JSONArray jsona = null;
  126. if (o instanceof JSONObject) {// 如果此元素已存在,则转为jsonArray
  127. JSONObject jsono = (JSONObject) o;
  128. json.remove(e.getName());
  129. jsona = new JSONArray();
  130. jsona.add(jsono);
  131. jsona.add(chdjson);
  132. }
  133. if (o instanceof JSONArray) {
  134. jsona = (JSONArray) o;
  135. jsona.add(chdjson);
  136. }
  137. json.put(e.getName(), jsona);
  138. } else {
  139. if (!chdjson.isEmpty()) {
  140. json.put(e.getName(), chdjson);
  141. }
  142. }
  143. } else {// 子元素没有子元素
  144. for (Object o : element.attributes()) {
  145. Attribute attr = (Attribute) o;
  146. if (!isEmpty(attr.getValue())) {
  147. json.put("@" + attr.getName(), attr.getValue());
  148. }
  149. }
  150. if (!e.getText().isEmpty()) {
  151. json.put(e.getName(), e.getText());
  152. }
  153. }
  154. }
  155. }
  156.  
  157. public static boolean isEmpty(String str) {
  158. if (str == null || str.trim().isEmpty() || "null".equals(str)) {
  159. return true;
  160. }
  161. return false;
  162. }
  163. public static String xmlToJson(String xml) {
  164. Document doc;
  165. try {
  166. doc = DocumentHelper.parseText(xml);
  167. JSONObject json = new JSONObject();
  168. dom4j2Json(doc.getRootElement(), json);
  169. return json.toString();
  170. } catch (DocumentException e) {
  171. e.printStackTrace();
  172. }
  173. return null;
  174. }
  175. }

模拟报文

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <SERVICE>
  3. <SERVICE_HEADER>
  4. <apple>苹果大苹果小苹果好吃的不得了</apple>
  5. </SERVICE_HEADER>
  6. <SERVICE_BODY>
  7. <INFORMATION>
  8. <USER>
  9. <NAME>姚明多大</NAME>
  10. <AGE>?</AGE>
  11. </USER>
  12. <USER>
  13. <NAME>姚明多高</NAME>
  14. <AGE>反正比你高</AGE>
  15. </USER>
  16. </INFORMATION>
  17. </SERVICE_BODY>
  18. </SERVICE>

模板配置

  1. 根据需要自动配置

XMl转Map-map调用公共模板的更多相关文章

  1. 将多层级xml解析为Map

    /** * 解析xml的工具类 * 1.将多层级xml解析为Map */ public class ParseXmlUtil { public static final String TAG = &q ...

  2. XML字符串转为Map集合

    public class xmlToMapUtils { /** * xml字符串转为map集合 * @param xmlStr * @return */ public static Map<S ...

  3. Dom4j把xml转换成Map(固定格式)

    /** * 可解析list * * @param fileName * @return * @throws Exception */ @SuppressWarnings("unchecked ...

  4. Dom4j把xml转换成Map(非固定格式)

    将xml转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml.转换规则:1.主要是Map与List的互相嵌套2.同名称的节点会被装进List 示例: import java.util. ...

  5. java XML解析成Map

    1.需要解析的文件.xml <?xml version="1.0" encoding="UTF-8"?> <request> <r ...

  6. 工具类--map 转成xml xml转成map

    public class WxChatReq { /** * Map转换成XML * @param data * @return * @throws Exception */ public stati ...

  7. 笔记 freemark list标签迭代Map<Map<String,Object>集合排序问题

    本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. 工作中出现一个比较特殊的问题,在模板ftl文件中,一般用list迭代map 举例: 后台: // 传入的参数 ...

  8. 小程序公共模板template与公共js数据utils的引用实例

    在小程序项目开发中,经常会遇到公共模板与公共js数据的调用,这里结合自己的项目为这一需求做一简单介绍 目录截图 现在是有一个评论版块需要在几个页面里共用 先将评论版块的wxml剔出来放在templat ...

  9. Angularjs调用公共方法与共享数据

    这个问题场景是在使用ionic开发页面的过程中发现,多个页面对应的多个controller如何去调用公共方法,比如给ionic引入了toast插件,如何将这个插件的调用变成公共方法或者设置成工具类,因 ...

随机推荐

  1. Linux常用基本命令(split )

    split命令 作用:切割文件 格式: split [option] [input] [prefix] -l 指定分割后文件的最大行数 ghostwu@dev:~/linux/split$ cat - ...

  2. php面向对象精要(3)

    1,final关键字定义的方法,不能被重写 由于final修饰了show方法,子类中重写show方法会报错 <?php class MyClass { final function show() ...

  3. python 递归和二分法

    一 内置函数 1. revserd 翻转,返回的是迭代器 # 将 s 倒置 s = '不是上海自来水来自海上' # 方法一 print(s[::-1]) # 方法二 s1 = reversed(s) ...

  4. promise 拙见

    一,promise是什么? promise 是最早由社区提出和实现是一种解决异步编程的方案,比其他传统的解决方案(回调函数和事件)更合理和强大. ES6 将其写进了语言标准,统一了用法,原生提供了 p ...

  5. 排错-windows下 ORA-12560 TNS 协议适配器错误解决方法

    排错-windows下_ORA-12560 TNS 协议适配器错误解决方法 by:授客 QQ:1033553122 问题描述: 修改SQL*Plus窗口属性后,重新打开SQL*Plus时出现ORA-1 ...

  6. 安卓开发_浅谈ListView(ArrayAdapter数组适配器)

    列表视图(ListView)以垂直的形式列出需要显示的列表项. 实现过程:新建适配器->添加数据源到适配器->视图加载适配器 在安卓中,有两种方法可以在屏幕中添加列表视图 1.直接用Lis ...

  7. js判断数组是否包含某个字符串变量

    最近碰到一个这样的现象,后台返回的数据中,数组里面有一些有变量值,有一些没有变量值. 举个例子,比如后台返回的例子是这样的: var arr=[ { "status":" ...

  8. 微信小程序获取Access_token和页面URL生成小程序码或二维码

    1.微信小程序获取Access_token: access_token具体时效看官方文档. using System; using System.Collections.Generic; using ...

  9. Django from表单及ajax提交文件

    参考: https://blog.csdn.net/baobao267/article/details/83038323

  10. MAC安装了mumu安卓模拟器,但无法检测到该模拟器

    1.adb   devices  看不到模拟器 2.adb connect 127.0.0.1:5555 3.adb kill-server 没有报错,即成功 4. adb start-server ...