XMl转Map-map调用公共模板
效果
- <?xmlversion="1.0"encoding="utf-8"?>
- <SERVICE>
- <SERVICE_HEADER>
- <apple>苹果大苹果小苹果好吃的不得了</apple>
- </SERVICE_HEADER>
- <SERVICE_BODY>
- <INFORMATION>
- <USER>
- <NAME>姚明多大</NAME>
- <AGE>?</AGE>
- </USER>
- <USER>
- <NAME>姚明多高</NAME>
- <AGE>反正比你高</AGE>
- </USER>
- </INFORMATION>
- </SERVICE_BODY>
- </SERVICE>
测试代码
- package com.sunline.nfs.process;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.StringWriter;
- import java.util.LinkedHashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Properties;
- import net.sf.json.JSONArray;
- import net.sf.json.JSONObject;
- import org.apache.velocity.Template;
- import org.apache.velocity.VelocityContext;
- import org.apache.velocity.app.Velocity;
- import org.apache.velocity.app.VelocityEngine;
- import org.dom4j.Attribute;
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.DocumentHelper;
- import org.dom4j.Element;
- import org.springframework.core.io.ClassPathResource;
- import org.springframework.core.io.Resource;
- public class velocityxml {
- static Map<String,Object> jsonMap = new LinkedHashMap<String,Object>();
- public static Map recursinMap(Map<String,Object> map){
- net.sf.json.JSONObject jObject = new net.sf.json.JSONObject();
- for(String key:map.keySet()){
- String str = map.get(key).toString();
- if(str.startsWith("{")){
- /*com.alibaba.fastjson.JSONObject jObject = JSON.parseObject(str);*/
- Map<String,Object> map2 = jObject.fromObject(str);
- if(!map.toString().endsWith(map2.toString()+"}")){
- int i = map.toString().indexOf(map2.toString())+;
- String value ="{" + map.toString().substring((i+map2.toString().length()),map.toString().length());
- map2.put(key, value);
- }
- return recursinMap(map2);
- }
- else{
- if(str.startsWith("[")){
- JSONArray tmpMaps = JSONArray.fromObject(str);
- jsonMap.put(key, tmpMaps);
- }
- else{
- jsonMap.put(key, str);
- }
- }
- }
- return jsonMap;
- }
- @SuppressWarnings("null")
- public static void main(String[] args) throws IOException{
- String filename = "partten.txt";
- String json = readJson(filename);
- json = xmlToJson(json);
- net.sf.json.JSONObject jObject = new net.sf.json.JSONObject();
- Map<String,Object> tmpmap = jObject.fromObject(json);
- Map<String,Object> map = recursinMap(tmpmap);
- //初始化参数
- Properties properties=new Properties();
- //设置velocity资源加载方式为class
- properties.setProperty("resource.loader", "class");
- //设置velocity资源加载方式为file时的处理类
- properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
- //实例化一个VelocityEngine对象
- VelocityEngine velocityEngine=new VelocityEngine(properties);
- //实例化一个VelocityContext
- VelocityContext context=new VelocityContext();
- for(Object key :jsonMap.keySet()){
- context.put((String)key, jsonMap.get(key));
- }
- //实例化一个StringWriter
- StringWriter writer=new StringWriter();
- velocityEngine.mergeTemplate("patternxml.txt", "gbk", context, writer);
- String str = writer.toString();
- str = str.replaceAll("\\s*", "");
- System.out.println(str);
- }
- public static String readJson(String filename){
- Resource resource =new ClassPathResource(filename);
- File file;
- try {
- file = resource.getFile();
- BufferedReader reader= new BufferedReader(new FileReader(file));
- String temp=null;
- String str="";
- while((temp=reader.readLine())!=null){
- str = str + temp;
- }
- return str;
- } catch (IOException e) {
- e.printStackTrace();
- }
- return null;
- }
- public static void dom4j2Json(Element element, JSONObject json) {
- // 如果是属性
- for (Object o : element.attributes()) {
- Attribute attr = (Attribute) o;
- if (!isEmpty(attr.getValue())) {
- json.put("@" + attr.getName(), attr.getValue());
- }
- }
- List<Element> chdEl = element.elements();
- if (chdEl.isEmpty() && !isEmpty(element.getText())) {// 如果没有子元素,只有一个值
- json.put(element.getName(), element.getText());
- }
- for (Element e : chdEl) {// 有子元素
- if (!e.elements().isEmpty()) {// 子元素也有子元素
- JSONObject chdjson = new JSONObject();
- dom4j2Json(e, chdjson);
- Object o = json.get(e.getName());
- if (o != null) {
- JSONArray jsona = null;
- if (o instanceof JSONObject) {// 如果此元素已存在,则转为jsonArray
- JSONObject jsono = (JSONObject) o;
- json.remove(e.getName());
- jsona = new JSONArray();
- jsona.add(jsono);
- jsona.add(chdjson);
- }
- if (o instanceof JSONArray) {
- jsona = (JSONArray) o;
- jsona.add(chdjson);
- }
- json.put(e.getName(), jsona);
- } else {
- if (!chdjson.isEmpty()) {
- json.put(e.getName(), chdjson);
- }
- }
- } else {// 子元素没有子元素
- for (Object o : element.attributes()) {
- Attribute attr = (Attribute) o;
- if (!isEmpty(attr.getValue())) {
- json.put("@" + attr.getName(), attr.getValue());
- }
- }
- if (!e.getText().isEmpty()) {
- json.put(e.getName(), e.getText());
- }
- }
- }
- }
- public static boolean isEmpty(String str) {
- if (str == null || str.trim().isEmpty() || "null".equals(str)) {
- return true;
- }
- return false;
- }
- public static String xmlToJson(String xml) {
- Document doc;
- try {
- doc = DocumentHelper.parseText(xml);
- JSONObject json = new JSONObject();
- dom4j2Json(doc.getRootElement(), json);
- return json.toString();
- } catch (DocumentException e) {
- e.printStackTrace();
- }
- return null;
- }
- }
模拟报文
- <?xml version="1.0" encoding="utf-8"?>
- <SERVICE>
- <SERVICE_HEADER>
- <apple>苹果大苹果小苹果好吃的不得了</apple>
- </SERVICE_HEADER>
- <SERVICE_BODY>
- <INFORMATION>
- <USER>
- <NAME>姚明多大</NAME>
- <AGE>?</AGE>
- </USER>
- <USER>
- <NAME>姚明多高</NAME>
- <AGE>反正比你高</AGE>
- </USER>
- </INFORMATION>
- </SERVICE_BODY>
- </SERVICE>
模板配置
- 根据需要自动配置
XMl转Map-map调用公共模板的更多相关文章
- 将多层级xml解析为Map
/** * 解析xml的工具类 * 1.将多层级xml解析为Map */ public class ParseXmlUtil { public static final String TAG = &q ...
- XML字符串转为Map集合
public class xmlToMapUtils { /** * xml字符串转为map集合 * @param xmlStr * @return */ public static Map<S ...
- Dom4j把xml转换成Map(固定格式)
/** * 可解析list * * @param fileName * @return * @throws Exception */ @SuppressWarnings("unchecked ...
- Dom4j把xml转换成Map(非固定格式)
将xml转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml.转换规则:1.主要是Map与List的互相嵌套2.同名称的节点会被装进List 示例: import java.util. ...
- java XML解析成Map
1.需要解析的文件.xml <?xml version="1.0" encoding="UTF-8"?> <request> <r ...
- 工具类--map 转成xml xml转成map
public class WxChatReq { /** * Map转换成XML * @param data * @return * @throws Exception */ public stati ...
- 笔记 freemark list标签迭代Map<Map<String,Object>集合排序问题
本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. 工作中出现一个比较特殊的问题,在模板ftl文件中,一般用list迭代map 举例: 后台: // 传入的参数 ...
- 小程序公共模板template与公共js数据utils的引用实例
在小程序项目开发中,经常会遇到公共模板与公共js数据的调用,这里结合自己的项目为这一需求做一简单介绍 目录截图 现在是有一个评论版块需要在几个页面里共用 先将评论版块的wxml剔出来放在templat ...
- Angularjs调用公共方法与共享数据
这个问题场景是在使用ionic开发页面的过程中发现,多个页面对应的多个controller如何去调用公共方法,比如给ionic引入了toast插件,如何将这个插件的调用变成公共方法或者设置成工具类,因 ...
随机推荐
- Linux常用基本命令(split )
split命令 作用:切割文件 格式: split [option] [input] [prefix] -l 指定分割后文件的最大行数 ghostwu@dev:~/linux/split$ cat - ...
- php面向对象精要(3)
1,final关键字定义的方法,不能被重写 由于final修饰了show方法,子类中重写show方法会报错 <?php class MyClass { final function show() ...
- python 递归和二分法
一 内置函数 1. revserd 翻转,返回的是迭代器 # 将 s 倒置 s = '不是上海自来水来自海上' # 方法一 print(s[::-1]) # 方法二 s1 = reversed(s) ...
- promise 拙见
一,promise是什么? promise 是最早由社区提出和实现是一种解决异步编程的方案,比其他传统的解决方案(回调函数和事件)更合理和强大. ES6 将其写进了语言标准,统一了用法,原生提供了 p ...
- 排错-windows下 ORA-12560 TNS 协议适配器错误解决方法
排错-windows下_ORA-12560 TNS 协议适配器错误解决方法 by:授客 QQ:1033553122 问题描述: 修改SQL*Plus窗口属性后,重新打开SQL*Plus时出现ORA-1 ...
- 安卓开发_浅谈ListView(ArrayAdapter数组适配器)
列表视图(ListView)以垂直的形式列出需要显示的列表项. 实现过程:新建适配器->添加数据源到适配器->视图加载适配器 在安卓中,有两种方法可以在屏幕中添加列表视图 1.直接用Lis ...
- js判断数组是否包含某个字符串变量
最近碰到一个这样的现象,后台返回的数据中,数组里面有一些有变量值,有一些没有变量值. 举个例子,比如后台返回的例子是这样的: var arr=[ { "status":" ...
- 微信小程序获取Access_token和页面URL生成小程序码或二维码
1.微信小程序获取Access_token: access_token具体时效看官方文档. using System; using System.Collections.Generic; using ...
- Django from表单及ajax提交文件
参考: https://blog.csdn.net/baobao267/article/details/83038323
- MAC安装了mumu安卓模拟器,但无法检测到该模拟器
1.adb devices 看不到模拟器 2.adb connect 127.0.0.1:5555 3.adb kill-server 没有报错,即成功 4. adb start-server ...