加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml2bean 把xml文件直接封装成bean

发布时间:2020-12-16 05:21:20 所属栏目:百科 来源:网络整理
导读:公司有个业务,要从ftp下载文件,文件中是xml,把xml信息存入数据库,如果一个一个字段去填充bean,那简直是个噩梦,果断写个xml2bean工具,在此分享(有待改进) private static T T XML2Bean(String ecinfo,ClassT t) throws DocumentException,Instantiati
公司有个业务,要从ftp下载文件,文件中是xml,把xml信息存入数据库,如果一个一个字段去填充bean,那简直是个噩梦,果断写个xml2bean工具,在此分享(有待改进)
private static <T> T XML2Bean(String ecinfo,Class<T> t) throws DocumentException,InstantiationException,IllegalAccessException {
		Preconditions.checkArgument(!Strings.isNullOrEmpty(ecinfo)); //google guava api,可以去掉,只是个前置验证
		
		SAXReader saxReader = new SAXReader();  //dom4j api 
		Document document = saxReader.read(new StringReader(ecinfo));
		List<Element> list = document.selectNodes("//*");//获得所有节点
		T cinfo = t.newInstance();  
		for(Element node: list){
			System.out.println(node.getName());
			fillBean(cinfo,node); //这个api弄得不是太美,可以这样的其实 fillBean(Class<T> t,Node),现在不改了,也可以用的
		}
//		System.out.println(document.asXML());
		return cinfo;
	}
private static <T> void fillBean(T t,Node node){
		try {
			Class<T>  eci = (Class<T>) t.getClass();
			Method[] methods =  eci.getMethods();
			for(Method method :methods){
				if(method.getName().startsWith("set")){
					String methodname = method.getName().substring(3);
					if(methodname.equalsIgnoreCase(node.getName())){
						method.invoke(t,node.getStringValue()==null?"":node.getStringValue().trim());
					}
					
				}
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		} 
	}
此段代码:要求,xml所有终端节点的tag name要和bean中一直,大小写无所谓。当然,这还有个问题,就是其实现在还是有个问题,要手动写个java bean,其实javabean 完全可以根据dom生成一个,这个工具也比较好开发,只是我做的时候没有开发,下一次再有此业务,在开发个吧

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读