本例使用的xml解析方式为jdom

...

<ROOT>

<Consignment>

...

</Consignment>

</ROOT>

解析xml文件

 InputStream xmlFileStream = new FileInputStream(xmlFile);
SAXBuilder builder = new SAXBuilder(new XMLReaderSAX2Factory(false));
Document document = builder.build(xmlFileStream);
Element root = document.getRootElement();

获得Consignment元素

Element consignElement = root.getChild("Consignment");

遍历元素封装Bean

public static Consignment getConsignment(Element consignElement) throws Exception {
Consignment consignment = null; try {
List<Element> elements = consignElement.getChildren();
Class<?> consignmentClz = Class.forName("com.entity.po.consignment.Consignment");
consignment = (Consignment) consignmentClz.newInstance();
for(Element ele : elements){
CheckTypeUtil.checkType(consignment, consignmentClz, ele);
}
} catch (Exception e) {
throw e;
} return consignment;
}
/**
* 解析对象时过滤字段属性类型
* @param sampleDnaGene
* @param sampleDnaGeneClz
* @param element
* @throws NoSuchFieldException
* @throws IllegalAccessException
*/
public static void checkType(Object object, Class<?> objectClz, Element chiledEle)
throws NoSuchFieldException, IllegalAccessException {
Field field = objectClz.getDeclaredField(chiledEle.getName());
field.setAccessible(true);
if("java.lang.Integer".equals(field.getType().getName())
|| "int".equals(field.getType().getName())){
if (!StringUtils.isEmpty(chiledEle.getTextTrim())) {
field.set(object,Integer.parseInt(chiledEle.getTextTrim()));
}
}else if("java.lang.Long".equals(field.getType().getName())
|| "long".equals(field.getType().getName())){
if(!StringUtils.isEmpty(chiledEle.getTextTrim())){
field.set(object,Long.parseLong(chiledEle.getTextTrim()));
}
}else if("java.util.Date".equals(field.getType().getName())){
if (!StringUtils.isEmpty(chiledEle.getTextTrim())) {
field.set(object, DateTools.stringToDate(chiledEle.getTextTrim()));
}
}else if("java.lang.Double".equals(field.getType().getName())
|| "double".equals(field.getType().getName())){
if(!StringUtils.isEmpty(chiledEle.getTextTrim())){
field.set(object,Double.parseDouble(chiledEle.getTextTrim()));
}
}else if("java.lang.Float".equals(field.getType().getName())
|| "float".equals(field.getType().getName())){
if(!StringUtils.isEmpty(chiledEle.getTextTrim())){
field.set(object,Float.parseFloat(chiledEle.getTextTrim()));
}
}else if("java.lang.Short".equals(field.getType().getName())
|| "short".equals(field.getType().getName())){
if(!StringUtils.isEmpty(chiledEle.getTextTrim())){
field.set(object,Short.parseShort(chiledEle.getTextTrim()));
}
}else{
if (!StringUtils.isEmpty(chiledEle.getTextTrim())) {
field.set(object, chiledEle.getTextTrim());
}else{
field.set(object,null);
}
}
}

【反射】利用java反射原理将xml文件中的字段封装成对应的Bean的更多相关文章

  1. web.xml文件中的7个错误的安全配置

    web.xml文件中的7个错误的安全配置 关于Java的web.xml文件中配置认证和授权有大 量 的 文章.本文不再去重新讲解如何配置角色.保护web资源和设置不同类型的认证,让我们来看看web.x ...

  2. Java从入门到精通——技巧篇之利用dom4j取出XML文件中的数据

    在我们做项目的时候会经常用到XML文件用来配置系统,XML让系统更加的具有了灵活性,Java如何从XML中取出我们想要的数据呢?下面是我利用DOM4J来实现取出XML文件中的数据. XML文件 < ...

  3. Spring MVC框架下在java代码中访问applicationContext.xml文件中配置的文件(可以用于读取配置文件内容)

    <bean id="propertyConfigurer" class="com.****.framework.core.SpringPropertiesUtil& ...

  4. java web 通过前台输入的数据(name-value)保存到后台 xml文件中

    一:项目需求,前端有一个页面,页面中可以手动输入一些参数数据,通过点击前端的按钮,使输入的数据保存到后台生成的.xml文件中 二:我在前端使用的是easyui的propertygrid,这个能通过da ...

  5. XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)

    XML序列化   #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...

  6. 读取xml文件中的配置参数实例_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 paras.xml文件 <?xml version="1.0" encoding=" ...

  7. web.xml文件中的web-app元素 部署

    [转载]web.xml文件中的web-app元素 (2012-05-24 13:35:57) 转载▼ 标签: 转载 分类: java 挺全 的 呵呵呵 转了 原文地址:web.xml文件中的web-a ...

  8. web.xml文件中加载顺序的优先级

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  9. Java眼中的XML文件写入

    创建DOM方式生成XML文档 DOMTest package com.imooc.domtest.test; import java.io.File; import java.io.IOExcepti ...

随机推荐

  1. 2.18比赛(T2,T3留坑)

    2.18比赛(T2,T3留坑) pdf版题面 pdf版题解 超越一切(ak) [题目描述] 夏洛可得到一个(h+1)×(w+1)的巧克力,这意味着她横着最多可 以切 h 刀,竖着最多可以切 w 刀 她 ...

  2. BZOJ1775[USACO 2009 Dec Gold 3.Video Game Troubles]——DP

    题目描述 输入 * 第1行: 两个由空格隔开的整数: N和V * 第2到第N+1行: 第i+1行表示第i种游戏平台的价格和可以在这种游戏平台上面运行的游 戏.包含: P_i, G_i还有G_i对由空格 ...

  3. Change upload file limit in specified Webapllication in SharePoint (PowerShell)

    http://gallery.technet.microsoft.com/office/Change-upload-file-limit-89502ff2  http://sharepointrela ...

  4. SharePoint 2013 批量导入、删除帐号

    删除一个group里所有的帐号: cls ########################### # "Enter the site URL here" $SITEURL = &q ...

  5. 【转】嵌入式系统 Boot Loader 技术内幕,带你完全了解Boot Loader

    在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序.包括固化在固件(firmware)中的 boo ...

  6. ubuntu 14.04下使用fcitx时将caps lock映射为ctrl

    在~/.xprofile中加入 setxkbmap -option caps:ctrl_modifier 要弄成全局的就在 /etc/X11/Xsession.d/ 里面找个文件塞进去. archli ...

  7. 使用debootstrap制作debian-jessie系统docker镜像

    先看一下Docker官网提示:In general, you'll want to start with a working machine that is running the distribut ...

  8. redux与react-redux

    Redux是一个数据状态管理插件,论是移动端还是 pc 端,当你使用 React 或者 vue 开发组件化的 SPA 程序时, 组件之间共享信息是一个非常大的问题.在react开发中,使用 React ...

  9. MyEclipse2017配置多个tomcat

    一:添加多个tomcat的运行环境 首先,在Window——Preferences 搜索 servers, 在Servers中点Runtime Environments, 点右边的Add,选择我们要添 ...

  10. windows中的mysql修改管理员密码

    上周安装了Mysl 但是却无法登陆,找了好久才找到这个解决办法,讲的详细谢谢了. [摘要:1.my-default.ini 更名my.ini 正在解压的目次上面复造my-default.ini一份更名 ...