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配 ...
随机推荐
- 【HIHOCODER 1163】 博弈游戏·Nim游戏
描述 今天我们要认识一对新朋友,Alice与Bob. Alice与Bob总是在进行各种各样的比试,今天他们在玩一个取石子的游戏. 在这个游戏中,Alice和Bob放置了N堆不同的石子,编号1..N,第 ...
- 3.3.3 使用 join 连接字段
join 命令可以将多个文件结合在一起,每个文件里的每条记录,都共享一个键值(key),键值指的是记录中的主字段,通常会是用户名称.个人姓氏.员工编号之类的数据.举例来说,两个文件,一个列出所 ...
- python基础——7(函数)
一.函数的定义(函数一定是先定义,后引用) 函数是完成特定功能的代码块. def:声明函数的关键字 fun:函数变量名 ():参数列表,参数可以是0-n个,但是()不能丢 函数体:实现功能的具体代码 ...
- 【01】sass安装
因为sass依赖于ruby环境,所以装sass之前先确认装了ruby.先导官网下载个ruby 下载地址:https://rubyinstaller.org/downloads/ ** ...
- jquery的ajax和getJson跨域获取json数据
目前浏览器端跨域访问常用的两种方法有两种: 1.通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的. jsonp是英文json with padding的缩写.它允许在服务器端 ...
- 【2018 Multi-University Training Contest 5】
01: 02:https://www.cnblogs.com/myx12345/p/9436953.html 03: 04: 05:https://www.cnblogs.com/myx12345/p ...
- C. Nearest vectors--cf598C(极角排序)
http://codeforces.com/problemset/problem/598/C 题目大意: 给你你个向量 向量的起点都是从(0,0)开始的 求哪个角最小 输出这两个向量 这是第一 ...
- S5700&S5710 产品文档 : 配置
http://support.huawei.com/hdx/hdx.do?docid=SC0000699332&lang=zh&path=PBI1-C103367%2FPBI1-C10 ...
- kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- [React] {svg, css module, sass} support in Create React App 2.0
create-react-app version 2.0 added a lot of new features. One of the new features is added the svgr ...