- 由于以前在解析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;
- }
- }