xml解析构建帮助类
2016-02-29 09:27
288 查看
package com.wondersgroup.wx.weiXin.utils; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import com.wondersgroup.wx.weiXin.bean.PayOrder; import com.wondersgroup.wx.weiXin.bean.ReturnPayInfo; /** * xml 帮助类 * @author 李阳阳 * */ public class XMLUtils { /** * 封装统一订单提交的xml格式 * @param to * @param from * @param content * @return */ @SuppressWarnings("rawtypes") public static String fromatXmlForPay(Map<String,Object> map) { StringBuffer sb = new StringBuffer(); sb.append("<xml>"); Set<?> es = map.entrySet(); Iterator<?> it = es.iterator(); while(it.hasNext()) { Map.Entry entry = (Map.Entry)it.next(); String k = (String)entry.getKey(); String v = (String)entry.getValue(); if(null != v && !"".equals(v) ) { sb.append("<" + k +">" + v + "</" + k + ">\n"); } } sb.append("</xml>"); return sb.toString(); } /** * * @param strXml 字符长形式的xml * @param clazz 目标对象的class类型 * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static Object getWxObject(String strXml,Class clazz){ Object obj=null; try { if (strXml.length() <= 0 || strXml == null) return null; // 将字符串转化为XML文档对象 Document document = DocumentHelper.parseText(strXml); // 获得文档的根节点 Element root = document.getRootElement(); // 遍历根节点下所有子节点 Iterator<?> iter = root.elementIterator(); //利用反射机制,调用set方法 obj =clazz.newInstance();//创建这个实体的对象 while(iter.hasNext()){ Element ele = (Element)iter.next(); //获取set方法中的参数字段(实体类的属性) Field field = clazz.getDeclaredField(ele.getName()); //解析到的field首字母大写 String str =ele.getName().replaceFirst(ele.getName().substring(0, 1), ele.getName().substring(0, 1).toUpperCase()); //获取set方法,field.getType())获取它的参数数据类型 Method method = clazz.getDeclaredMethod("set"+str, field.getType()); //调用set方法 method.invoke(obj, ele.getText()); } } catch (Exception e) { System.out.println("xml 格式异常: "+ strXml); e.printStackTrace(); } return obj; } public static void main(String[] args) { // Map<String, Object> map=new LinkedHashMap<String, Object>(); // map.put("a", "1"); // map.put("b", "2"); // map.put("c", "3"); // map.put("d", "4"); // map.put("e", ""); // map.put("f", "6"); // System.out.println(fromatXmlForPay(map)); String strXml="<xml><return_msg>2222</return_msg><appid>333</appid><mch_id>444</mch_id><nonce_str>5555</nonce_str>"+ "<sign>6666</sign><result_code>777</result_code><prepay_id>888</prepay_id><trade_type>999</trade_type></xml> "; ReturnPayInfo info=(ReturnPayInfo) getWxObject(strXml, ReturnPayInfo.class); System.out.println(info.getReturn_msg()); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序