- 由於以前在解析XML的時候,每次都要採用獲取XML中的屬性名來獲取對應的值,每一個bean類都要寫一個XML解析器。這將會使代碼變得更加冗餘,而沒辦法做到高度抽象。幸虧Java有自身的內省機制,Introspector與反射類似,主要是對Java Bean屬性、方法等的一種處理方法。
- package com.ibm.cn.xml;
- import java.beans.BeanInfo;
- importjava.beans.Introspector;
- import java.beans.PropertyDescriptor;
- import java.io.File;
- importjava.lang.reflect.Method;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import org.dom4j.Document;
- import org.dom4j.Element;
- importorg.dom4j.io.SAXReader;
- /**
- * XML解析工具類
- * @author javamickey
- * @date 2012-11-01
- * @version 2.0
- */
- public class ParsersUtil {
- /**
- * 通過XML文件名,來解析XML對象,此函數只針對XML中存在一個bean值的情況
- * @paramfileName XML文件名
- * @param typebean類名
- * @return 單個bean對象
- * @throwsException
- */
- public static Object parserXMLByFileName(StringfileName, Class<?> type)
- throws Exception {
- Class<? extends Object>beanClass = Class.forName(type.getName());
- Object bean =beanClass.newInstance();
- File inputXml = new File(fileName);
- SAXReader saxReader = new SAXReader();
- try {
- Document document =saxReader.read(inputXml);
- Element element =document.getRootElement();
- BeanInfo beanInfo =Introspector.getBeanInfo(type);
- PropertyDescriptor[]propertyDescriptors = beanInfo.getPropertyDescriptors();
- for(PropertyDescriptor propertyDescriptor : propertyDescriptors) {
- StringpropertyName = propertyDescriptor.getName();
- for(Iterator<?> iterator = element.elementIterator(); iterator.hasNext();) {
- ElementemployeeElement = (Element) iterator.next();
- if(!propertyName.equals("class")) {
- MethodreadMethod = propertyDescriptor.getWriteMethod();
- Stringvalue = employeeElement.elementText(propertyName);
- System.out.println("propertyName="+ propertyName + "value = " + value);
- if(value != null) {
- readMethod.invoke(type,value);
- }
- }
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return bean;
- }
- /**
- * 通過XML文件名,來解析XML對象,此函數針對XML中存在一個或者多個bean值的情況
- * @paramfileName XML文件名
- * @param typebean類名
- * @return 返回一個List<bean>
- * @throwsException
- */
- public static List<Object>parserXMLByFileNameList(String fileName, Class<?> type)
- throws Exception {
- Class<? extends Object>beanClass = Class.forName(type.getName());
- List<Object> beanList = newArrayList<Object>();
- File inputXml = new File(fileName);
- SAXReader saxReader = newSAXReader();
- try {
- Document document =saxReader.read(inputXml);
- Element element =document.getRootElement();
- BeanInfo beanInfo =Introspector.getBeanInfo(type);
- PropertyDescriptor[]propertyDescriptors = beanInfo.getPropertyDescriptors();
- for(Iterator<?> iterator = element.elementIterator(); iterator.hasNext();) {
- Objectbean = beanClass.newInstance();
- ElementemployeeElement = (Element) iterator.next();
- for(PropertyDescriptor propertyDescriptor : propertyDescriptors) {
- StringpropertyName = propertyDescriptor.getName();
- if(!propertyName.equals("class")) {
- MethodreadMethod = propertyDescriptor.getWriteMethod();
- Stringvalue = employeeElement.elementText(propertyName);
- System.out.println("propertyName="+ propertyName + "value = " + value);
- if(value != null) {
- readMethod.invoke(bean,value);
- }
- }
- }
- beanList.add(bean);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return beanList;
- }
- }
XML解析工具類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.