xml2bean 把xml文件直接封裝成bean

公司有個業務,要從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生成一個,這個工具也比較好開發,只是我做的時候沒有開發,下一次再有此業務,在開發個吧
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章