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;
        }
    }
}
时间: 2024-10-12 02:21:44

Dom4J XML转bean的相关文章

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

原文地址:http://www.xuebuyuan.com/210489.html 以前一直用myelipse,在myeclipse做hibernate逆向工程倒是很顺手了. 可是最近改用eclipse了,开始是不会装eclipse插件,折腾了几天终于装下去了,可是又不会用病逆向工程 终于在一国外网站上终于找到了: http://iablog.sybase.com/paulley/2009/02/reverse-engineering-sql-anywhere-with-hibernate-to

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

通过XML装配Bean ? 尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的. 3.1创建XML配置规范 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=&quo

XStream进行xml和bean互转

加入pom <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.3</version> </dependency> 最简单的使用方式 XStream xStream = new XStream(); //声明XStream注解来源 xStream.proces

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

通过XML装配bean Spring现在有了强大的自动化配置和基于Java的配置,XML不应该再是你的第一选择了.不过,鉴于已经存在那么多基于XML的Spring配置,所以理解如何在Spring中使用XML还是很重要的.但是,我希望本节的内容只是用来帮助你维护已有的XML配置,在完成新的Spring工作时,希望你会使用自动化配置和JavaConfig. 一.创建XML配置规范 在使用XML为Spring装配bean之前,你需要创建一个新的配置规范.在使用JavaConfig的时候,这意味着要创建

xml和bean之间转化

xml和bean之间转化//bean@XmlRootElement(name = "register")br/>@XmlAccessorType(XmlAccessType.PROPERTY)@XmlType(propOrder = {"name","age" })public class User {private String name;private String age;public String getName() {return

xml、bean、json互转工具,可直接CV就用

1.jar包 <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib

dom4j xml的生成与解析

这两天在一直写数据接口,涉及到数据xml文件的生成与解析,在此,简单地记录和总结一下. 其实,生成与解析xml文件主要还是运用java中的I/O文件的知识点. 现在大多数的人写xml文件的生成和解析都使用dom4j,它确实比传统的w3c的写法要简单方便的多.就像jQuery相比于js的优点显而易见一般. dom4j 简介: dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常优秀的Java XML API,同时它也是一个开放源代码的软件,可以在So

Dom4J xml处理(我的第一个封装类)

Dom4J 是处理xml的一个高效强大的工具包 下面是我自己写的工具类 希望能对大家有帮助,下面是主要方法(注本类使用dom4j-1.6.1.jar包下载地址http://pan.baidu.com/s/1o7Vasmm) 主要方法1:getDocument(String path):获取documen对象           2:xmlWrites(String path,Document document):回写xml文件 3:getElement(String qname,String t

jaxb xml to bean

package www.garbin.com.utils; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import java.io.IOException; import java.io.StringReader; import java.io.String