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配 ...
随机推荐
- PAT 1027. 打印沙漏
打印沙漏 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ***** *** * *** ***** 所谓"沙漏形状" ...
- Python 爬虫从入门到进阶之路(三)
之前的文章我们做了一个简单的例子爬取了百度首页的 html,本篇文章我们再来看一下 Get 和 Post 请求. 在说 Get 和 Post 请求之前,我们先来看一下 url 的编码和解码,我们在浏览 ...
- 学习JSON
JSON:JavaScript Object Notation,轻量级的文本数据交换格式 .是存储和交换文本信息的语法.类似XML.但 JSON比XML更小.更快,更易解析.JSON使用Java ...
- SqlParameter[] parameters
SqlParameter[] parameters = { new SqlParameter("@rdTypeName", readertype.rdTypeName), new ...
- Codeforces Round #321 (Div. 2)-A. Kefa and First Steps,暴力水过~~
A. Kefa and First Steps time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- HDU 1358 next数组的推移
题目大意: 输入n,再输入一个长度为n的字符串,从第二位开始,计算它的前缀(包括他自己)中出现过的重复字符串的个数,如aabaabaabaab的第6位的前缀aabaab,aab连续出现了两次,所以输出 ...
- HDU 6437 最(大) 小费用最大流
Problem L.Videos Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- Codeforces 653D Delivery Bears【二分+网络流】
题目链接: http://codeforces.com/problemset/problem/653/D 题意: x个熊拿着相同重量的物品,从1号结点沿着路走到N号结点,结点之间有边相连,保证可以从1 ...
- Sudoku Killer--hdu1426(数独 跟上一题差不多 但是输入时问题)
http://acm.hdu.edu.cn/showproblem.php?pid=1426 注意输入问题就行 还是dfs #include<stdio.h> #include<st ...
- ASCII流程图
http://asciiflow.com/ http://www.torchsoft.com/en/aas_information.html