xml转换成对象并赋值

public static Object parseXmlToObject(Element ele, Class<?> clas)
			throws Exception {
		Field[] fields = clas.getDeclaredFields();
		List<?> childLists = ele.elements();
		Object obj = clas.newInstance();
		for (Object object : childLists) {
			Element element = (Element) object;
			String name = element.getName();
			String value = element.getText();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			for (Field field : fields) {
				field.setAccessible(true);
				String fieldName = field.getName();
				if (name.equals(fieldName)) {
					String setMethodName = "set"
							+ fieldName.substring(0, 1).toUpperCase()
							+ fieldName.substring(1);
					Class<?> type = field.getType();
					Method method = clas.getMethod(setMethodName, type);
					method.setAccessible(true);
					Object parseVal = null;
					if (type == Date.class ) {
						parseVal = sdf.parse(value);
					} else if (type == String.class) {
						parseVal = value.toString();
					} else if ((type == Integer.class || type == Integer.TYPE) ) {
						parseVal = Integer.parseInt(value.toString());
					} else if ((type == Double.class || type == Double.TYPE) ) {
						parseVal = Double.parseDouble(value.toString());
					} else if ((type == Float.class || type == Float.TYPE) ) {
						parseVal = Float.parseFloat(value.toString());
					} else if ((type == Short.class || type == Short.TYPE)) {
						parseVal = Short.parseShort(value.toString());
					} else if ((type == Long.class || type == Long.TYPE)) {
						parseVal = Long.parseLong(value.toString());
					} else if ((type == BigDecimal.class || type == BigDecimal.class)) {
						parseVal = new BigDecimal(value.toString());
					} else {
						parseVal = value;
					}

					method.invoke(obj, parseVal);
				}
			}
		}
		return obj;
	}

主要实现对xml元素的自动转换成对象并赋值
主要知识点

  1. 泛型 <?>
  2. 反射
    2.1 获取 字段 getDeclaredFields
    2.2 获取 方法 getMethod 通过字段的名称拼接前缀生成方法名
  3. 字段可访问性设置,field.setAccessible 方法 method.setAccesssible
  4. 类型判断 isinstance 或 ·==
  5. 反射方法调用 method.invoke(object,args)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值