Dom4J XML转bean
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的更多相关文章
- dom4j+反射实现bean与xml的相互转换
由于目前在工作中一直用的dom4j+反射实现bean与xml的相互转换,记录一下,如果有不正确的地方欢迎大家指正~~~ 一.反射机制 在此工具类中使用到了反射技术,所以提前也看了一些知识点,例如:ht ...
- [转]hibernate在eclipse的逆向工程生成hbm.xml和bean类
原文地址:http://www.xuebuyuan.com/210489.html 以前一直用myelipse,在myeclipse做hibernate逆向工程倒是很顺手了. 可是最近改用eclips ...
- 使用Jaxb2进行xml与bean的转义时Date的format设置
参考http://jackyrong.iteye.com/blog/1826699 JAXB转换JAVA OBJECT到XML的时候,对java.util.Date的转换有些要注意的地方 输出的格式为 ...
- Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配
一.Spring IOC 容器支持自动装配 Bean,所谓自动装配是指,不需要通过 <property> 或 <constructor-arg> 为 Bean 的属性注入值的过 ...
- spring学习总结——装配Bean学习三(xml装配bean)
通过XML装配bean Spring现在有了强大的自动化配置和基于Java的配置,XML不应该再是你的第一选择了.不过,鉴于已经存在那么多基于XML的Spring配置,所以理解如何在Spring中使用 ...
- Springboot中使用Xstream进行XML与Bean 相互转换
在现今的项目开发中,虽然数据的传输大部分都是用json格式来进行传输,但是xml毕竟也会有一些老的项目在进行使用,正常的老式方法是通过获取节点来进行一系列操作,个人感觉太过于复杂.繁琐.推荐一套简单的 ...
- XStream进行xml和bean互转
加入pom <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>x ...
- 利用jaxb实现xml和bean的相互转换
1.使用jar包生成xsd文件 java -jar trang.jar a.xml a.xsd xml格式 生成的xsd文件 2.使用xjc命令生成bean文件 xjc a.xsd 生成的相关bean ...
- 第2章—装配Bean—通过XML装配Bean
通过XML装配Bean 尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的. 3.1创建XML配 ...
随机推荐
- Sql按照字段分组,选取其他字段最值所在的行记录
引言: 为什么会引入这个问题,在程序中遇到这样的问题,在某个数据表中,相同的AID(项目ID)被多次添加到数据表中,所以对应于不同的时间,只想选取添加时间最早的哪一条记录. 参考:红黑联盟 所用到的数 ...
- Vue如何在webpack设置代理解决跨域问题
在开发过程中我们请求数据有时候调用的是第三方接口,此时便会遇到一个问题:跨域限制.对于跨域问题的解释就不详细叙述了,要了解的请自行百度.一般跨域问题控制台会报这个错: ...
- 分享21个基于jquery菜单导航的效果
jquery导航菜单插件制作jquery动画菜单熔岩灯菜单效果更新时间:02月15日 14:53:03 虾米精选-菜单导航-导航菜单 0浏览 / ★★★☆☆星级 / 未知软件大小/ jquery导航菜 ...
- LR手动关联参数化问题总结
所谓的关联就是把脚本中某些写死的代码(hard-coded)数据,转变成截取自服务器所送的.动态的.每次都不一样的数据. 一般情况下,比较聪明的服务器在每个浏览器第一次跟它要数据时,都会在数据中夹带一 ...
- Python 和 Flask实现RESTful services
使用Flask建立web services超级简单. 当然,也有很多Flask extensions可以帮助建立RESTful services,但是这个例实在太简单了,不需要使用任何扩展. 这个we ...
- bzoj1086 [SCOI2005]王室联邦 树分块
[bzoj1086][SCOI2005]王室联邦 2014年11月14日2,6590 Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的 ...
- 道路游戏(洛谷 P1070)
题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 n 个机器人工厂编 ...
- hdu3306:Another kind of Fibonacci
A(0)=A(1)=1,A(i)=X*A(i-1)+Y*A(i-2),求S(n)=A(0)^2+A(1)^2+A(2)^2+A(3)^2+……+A(n)^2. 这个矩阵有点毒.. #include&l ...
- gerrit ssh 登陆设置
[root@web ~]# cat ~/.ssh/config Host gerrit User deploy-gerrit Port Hostname gerrit.demo.com Identit ...
- hdu3622 2-sat问题,二分+判断有无解即可。
/*2-sat问题初破!题意:每一对炸弹只能选一个(明显2-sat),每个炸弹半径自定,爆炸范围不可 相交,求那个最小半径的最大值(每种策略的最小半径不同).思:最优解:必然是选择的点最近 的俩个距离 ...