1. package com.baiwang.bop.utils;
  2.  
  3. import com.baiwang.bop.client.BopException;
  4. import org.dom4j.Element;
  5.  
  6. import java.lang.reflect.Field;
  7. import java.lang.reflect.Method;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10.  
  11. /**
  12. * Created by ChengLuchao on 2017/8/12.
  13. */
  14. public class XmlUtil {
  15.  
  16. /**
  17. * Element转list
  18. *
  19. * @param root ontnull
  20. * @param clazz ontnull
  21. * @param <T> ontnull
  22. * @return bean
  23. */
  24. public static <T> List<T> getList(Element root, Class<T> clazz) {
  25. List<T> list = new ArrayList<>();
  26. try {
  27. List<Element> elements = root.elements();
  28. for (int i = 0; i < elements.size(); i++) {
  29. T t = getBean(elements.get(i), clazz);
  30. list.add(t);
  31. }
  32. } catch (Exception e) {
  33. throw new BopException(e);
  34. }
  35. return list;
  36. }
  37.  
  38. /**
  39. * Element转Bean
  40. *
  41. * @param root ontnull
  42. * @param clazz ontnull
  43. * @param <T> ontnull
  44. * @return bean
  45. */
  46. public static <T> T getBean(Element root, Class<T> clazz) {
  47. try {
  48. T t = clazz.newInstance();
  49. Field[] properties = clazz.getDeclaredFields();
  50. Method setmeth;
  51. String fieldType;
  52. String fieldGenericType;
  53. String className;
  54. for (int i = 0; i < properties.length; i++) {
  55. fieldType = (properties[i].getType() + "");
  56. setmeth = t.getClass().getMethod(
  57. "set"
  58. + properties[i].getName().substring(0, 1)
  59. .toUpperCase()
  60. + properties[i].getName().substring(1), properties[i].getType());
  61. if ("interface java.util.List".equals(fieldType)) {
  62. fieldGenericType = properties[i].getGenericType() + "";
  63. String[] sp1 = fieldGenericType.split("<");
  64. String[] sp2 = sp1[1].split(">");
  65. className = sp2[0];
  66. Object listNode = getList(root.element(properties[i].getName()),
  67. Class.forName(className));
  68. setmeth.invoke(t, listNode);
  69. } else {
  70. setmeth.invoke(t, root.elementText(properties[i].getName()));
  71. }
  72. }
  73. return t;
  74. } catch (Exception e) {
  75. throw new BopException(e);
  76. }
  77. }
  78.  
  79. /**
  80. * 判断是否是合法的list
  81. *
  82. */
  83. public static boolean isList(Element root) {
  84. int type = 0;
  85. if (root != null) {
  86. List<Element> elements = root.elements();
  87. String elementName;
  88. String elementNameFlag;
  89. if (elements != null && elements.size() > 0) {
  90. elementNameFlag = elements.get(0).getName();
  91. for (int i = 1; i < elements.size(); i++) {
  92. elementName = elements.get(i).getName();
  93. if (elementNameFlag.equals(elementName)) {
  94. // 是list
  95. type = 1;
  96. } else {
  97. if (type == 1) {
  98. throw new BopException(
  99. "This XML is not in the right format,"
  100. + "please add a parent node for Node of the same name!");
  101. } else {
  102. elementNameFlag = elementName;
  103. }
  104. }
  105. }
  106. }
  107. }
  108. if (type == 1) {
  109. return true;
  110. } else {
  111. return false;
  112. }
  113. }
  114. }

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. 【HIHOCODER 1163】 博弈游戏·Nim游戏

    描述 今天我们要认识一对新朋友,Alice与Bob. Alice与Bob总是在进行各种各样的比试,今天他们在玩一个取石子的游戏. 在这个游戏中,Alice和Bob放置了N堆不同的石子,编号1..N,第 ...

  2. 3.3.3 使用 join 连接字段

        join 命令可以将多个文件结合在一起,每个文件里的每条记录,都共享一个键值(key),键值指的是记录中的主字段,通常会是用户名称.个人姓氏.员工编号之类的数据.举例来说,两个文件,一个列出所 ...

  3. python基础——7(函数)

    一.函数的定义(函数一定是先定义,后引用) 函数是完成特定功能的代码块. def:声明函数的关键字 fun:函数变量名 ():参数列表,参数可以是0-n个,但是()不能丢 函数体:实现功能的具体代码 ...

  4. 【01】sass安装

    因为sass依赖于ruby环境,所以装sass之前先确认装了ruby.先导官网下载个ruby   下载地址:https://rubyinstaller.org/downloads/       ** ...

  5. jquery的ajax和getJson跨域获取json数据

    目前浏览器端跨域访问常用的两种方法有两种: 1.通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的. jsonp是英文json with padding的缩写.它允许在服务器端 ...

  6. 【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 ...

  7. C. Nearest vectors--cf598C(极角排序)

    http://codeforces.com/problemset/problem/598/C 题目大意: 给你你个向量  向量的起点都是从(0,0)开始的   求哪个角最小  输出这两个向量 这是第一 ...

  8. S5700&S5710 产品文档 : 配置

    http://support.huawei.com/hdx/hdx.do?docid=SC0000699332&lang=zh&path=PBI1-C103367%2FPBI1-C10 ...

  9. kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  10. [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  ...