package com.baiwang.bop.utils;

import com.baiwang.bop.client.BopException;
import org.dom4j.Element; import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List; /**
* Created by ChengLuchao on 2017/8/12.
*/
public class XmlUtil { /**
* Element转list
*
* @param root ontnull
* @param clazz ontnull
* @param <T> ontnull
* @return bean
*/
public static <T> List<T> getList(Element root, Class<T> clazz) {
List<T> list = new ArrayList<>();
try {
List<Element> elements = root.elements();
for (int i = 0; i < elements.size(); i++) {
T t = getBean(elements.get(i), clazz);
list.add(t);
}
} catch (Exception e) {
throw new BopException(e);
}
return list;
} /**
* Element转Bean
*
* @param root ontnull
* @param clazz ontnull
* @param <T> ontnull
* @return bean
*/
public static <T> T getBean(Element root, Class<T> clazz) {
try {
T t = clazz.newInstance();
Field[] properties = clazz.getDeclaredFields();
Method setmeth;
String fieldType;
String fieldGenericType;
String className;
for (int i = 0; i < properties.length; i++) {
fieldType = (properties[i].getType() + "");
setmeth = t.getClass().getMethod(
"set"
+ properties[i].getName().substring(0, 1)
.toUpperCase()
+ properties[i].getName().substring(1), properties[i].getType());
if ("interface java.util.List".equals(fieldType)) {
fieldGenericType = properties[i].getGenericType() + "";
String[] sp1 = fieldGenericType.split("<");
String[] sp2 = sp1[1].split(">");
className = sp2[0];
Object listNode = getList(root.element(properties[i].getName()),
Class.forName(className));
setmeth.invoke(t, listNode);
} else {
setmeth.invoke(t, root.elementText(properties[i].getName()));
}
}
return t;
} catch (Exception e) {
throw new BopException(e);
}
} /**
* 判断是否是合法的list
*
*/
public static boolean isList(Element root) {
int type = 0;
if (root != null) {
List<Element> elements = root.elements();
String elementName;
String elementNameFlag;
if (elements != null && elements.size() > 0) {
elementNameFlag = elements.get(0).getName();
for (int i = 1; i < elements.size(); i++) {
elementName = elements.get(i).getName();
if (elementNameFlag.equals(elementName)) {
// 是list
type = 1;
} else {
if (type == 1) {
throw new BopException(
"This XML is not in the right format,"
+ "please add a parent node for Node of the same name!");
} else {
elementNameFlag = elementName;
}
}
}
}
}
if (type == 1) {
return true;
} else {
return false;
}
}
}

Dom4J XML转bean的更多相关文章

  1. dom4j+反射实现bean与xml的相互转换

    由于目前在工作中一直用的dom4j+反射实现bean与xml的相互转换,记录一下,如果有不正确的地方欢迎大家指正~~~ 一.反射机制 在此工具类中使用到了反射技术,所以提前也看了一些知识点,例如:ht ...

  2. [转]hibernate在eclipse的逆向工程生成hbm.xml和bean类

    原文地址:http://www.xuebuyuan.com/210489.html 以前一直用myelipse,在myeclipse做hibernate逆向工程倒是很顺手了. 可是最近改用eclips ...

  3. 使用Jaxb2进行xml与bean的转义时Date的format设置

    参考http://jackyrong.iteye.com/blog/1826699 JAXB转换JAVA OBJECT到XML的时候,对java.util.Date的转换有些要注意的地方 输出的格式为 ...

  4. Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配

    一.Spring IOC 容器支持自动装配 Bean,所谓自动装配是指,不需要通过 <property> 或 <constructor-arg> 为 Bean 的属性注入值的过 ...

  5. spring学习总结——装配Bean学习三(xml装配bean)

    通过XML装配bean Spring现在有了强大的自动化配置和基于Java的配置,XML不应该再是你的第一选择了.不过,鉴于已经存在那么多基于XML的Spring配置,所以理解如何在Spring中使用 ...

  6. Springboot中使用Xstream进行XML与Bean 相互转换

    在现今的项目开发中,虽然数据的传输大部分都是用json格式来进行传输,但是xml毕竟也会有一些老的项目在进行使用,正常的老式方法是通过获取节点来进行一系列操作,个人感觉太过于复杂.繁琐.推荐一套简单的 ...

  7. XStream进行xml和bean互转

    加入pom <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>x ...

  8. 利用jaxb实现xml和bean的相互转换

    1.使用jar包生成xsd文件 java -jar trang.jar a.xml a.xsd xml格式 生成的xsd文件 2.使用xjc命令生成bean文件 xjc a.xsd 生成的相关bean ...

  9. 第2章—装配Bean—通过XML装配Bean

    通过XML装配Bean ​ 尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的. 3.1创建XML配 ...

随机推荐

  1. Kubernetes网络设计原则

    在配置集群网络插件或者实践K8S 应用/服务部署请时刻想到这些原则: 1.每个Pod都拥有一个独立IP地址,Pod内所有容器共享一个网络命名空间 2.集群内所有Pod都在一个直接连通的扁平网络中,可通 ...

  2. [luoguP2982][USACO10FEB]慢下来Slowing down(dfs序 + 线段树)

    传送门 这个题显然可以用树链剖分做. 然而线段树也能做. 每个点都对它的子树有贡献,所以先求一边 dfs序,然后直接在 dfs序 中搞 线段树 就行. ——代码 #include <cstdio ...

  3. msp430项目编程10

    msp430中项目---电子密码锁 1.扫描键盘工作原理 2.电路原理说明 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习

  4. 收藏CSS经典技巧

    一. CSS字体属性简写规则 一般用CSS设定字体属性是这样做的: font-weight: bold; font- style: italic; font-varient: small-caps;  ...

  5. SGU 194 无源无汇可行流求解

    题意:n个点,m条边,每条边有容量限制 l--c,每个点满足容量平衡(流入等于流出),求可行解 无源无汇可行流问题,建立以一个超级源点和超级汇点,由于原来最大流问题时候,流量下界其实为0, 所以要转化 ...

  6. Python 列表的复制操作

    2013-10-18 10:07:03|   import copy a = [1,2,3,['a','b']] b = a c = a[:] d = copy.copy(a) e = copy.de ...

  7. Eclipse 中 新建maven项目 无法添加src/main/java 问题

    eclipse创建maven web项目,在选择maven_archetype_web原型后,默认只有src/main/resources这个Source Floder. 按照maven目录结构,添加 ...

  8. Spring教程:tutorialspoint-spring

    来自turorialspoint的Spring教程(英文),官网:https://www.tutorialspoint.com/spring/index.htm 这个教程在国内已经被翻译成中文(不过是 ...

  9. Java实现敏感词过滤代码

    原文:http://www.open-open.com/code/view/1445762764148 import java.io.BufferedReader; import java.io.Fi ...

  10. DATASNAP高效的FIREDAC数据序列和还原

    变量定义: varFDConnection: TFDConnection;qCustomers: TFDQuery; qOrders: TFDQuery;FDSchemaAdapter: TFDSch ...