学习java—第三十一天学习笔记

348 阅读1分钟

2019.8.16 NIIT第三十一天

xml解析数据

例题 一、 有以下XML文件:

<beans>
	<bean className = “com.igeek.domain.Car”>
		<property name = “brand” value = “宝马”/>
		<property name = “color” value = “红色”/>
		<property name = “price” value = “280000”/>
		<property name = “type” value = “CX200”/>
		<property name = “productDate” value = “2016-10-30”/>
	</bean>
	<bean className = “com.igeek.domain.Book”>
		<property name = “title” value = “Oracle管理员手册”/>
		<property name = “publishDate” value = “2017-01-28”/>
		<property name = “price” value = “35”/>
		<property name = “publishingHouse” value = “极客营出版社”/>
		<property name = “author” value = “极客人”/>
	</bean>
</beans>

二、 请按XML文件中的属性定义两个类。并使用dom4j解析这个xml文件,先获取每个元素的className属性,通过反射创建对象。获取每个bean数据,使用BeanUtils工具分别填充两个Bean对象。

package day18作业_Test1_8;

import org.apache.commons.beanutils.BeanUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.List;

public class MainApp {
    static  HashMap<String,Object> map=new HashMap<>();
    public static void main(String[] args) {
        //获取xml中的值,解析并创建对象放入map中
        analyseXml();
        System.out.println(map.toString());
    }

    private static void analyseXml() {

        try {
            Object object=null;
            SAXReader saxReader=new SAXReader();
            Document document=saxReader.read("src/day18作业_Test1_8/bean.xml");
            Element rootElement=document.getRootElement();
            List<Element> allBean=rootElement.elements("bean");
            for (Element bean:allBean) {
                String className=bean.attributeValue("className");
                //System.out.println(className);

                //创建obj对象

                Class clazz=Class.forName(className);
                object=clazz.newInstance();

                List<Element> allproperty =bean.elements("property");
                for (Element property:allproperty) {
                    String name=property.attributeValue("name");
                    String value=property.attributeValue("value");
                    //System.out.println(name+":"+value);

                    //为obj对象注入属性
                    BeanUtils.setProperty(object,name,value);
                }
                map.put(className,object);
            }

        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }
}