zoukankan      html  css  js  c++  java
  • java XML 通过BeanUtils的population为对象赋值 根据用户选择进行dom4j解析

    根据xml文件设计Student对象

    <?xml version="1.0" encoding="UTF-8"?>
    <students>
        <course name = "平面设计">
            <student id = "it001">
                <name>章子怡</name>
                <age>20</age>
                <sex>女</sex>
                <score>99</score>
            </student>
            <student id = "it002">
                <name>杨颖</name>
                <age>21</age>
                <sex>女</sex>
                <score>100</score>
            </student>
        </course>
        <course name = "JavaEE">
            <student id = "it003">
                <name>汪峰</name>
                <age>22</age>
                <sex>男</sex>
                <score>89</score>
            </student>
            <student id = "it004">
                <name>撒贝宁</name>
                <age>23</age>
                <sex>男</sex>
                <score>90</score>
            </student>
        </course>
    </students>

    设计学生类

    package com.swift.kaoshi;
    
    public class Student {
    
        private String id;
        private String name;
        private int age;
        private String sex;
        private int score;
        private String course;
        
        public Student() {
            super();
            // TODO Auto-generated constructor stub
        }
        
        public Student(String id, String name, int age, String sex, int score, String course) {
            super();
            this.id = id;
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.score = score;
            this.course = course;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
    
    
        public int getScore() {
            return score;
        }
    
        public void setScore(int score) {
            this.score = score;
        }
        public String getCourse() {
            return course;
        }
        public void setCourse(String course) {
            this.course = course;
        }
        @Override
        public String toString() {
            return "Student [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + ", score=" + score
                    + ", course=" + course + "]";
        }
        
    }

    根据菜单进行解析

    package com.swift.kaoshi;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Scanner;
    import java.util.Set;
    
    import org.apache.commons.beanutils.BeanUtils;
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    /*
    
    请按以下要求编写代码:
    1.    按XML文档描述创建Student类(注意:包含id字段、科目字段);
    2.    为用户列出菜单:
    【查询学员】
    1.按学科   2.按性别   3.按年龄   4.按分数    5.退出
    3.    用户选择:
    1.    按学科:检索出XML中所有的”学科”名称,并继续列出菜单:
             例如:1.平面设计   2.JavaEE
    2.    按性别:列出性别选择二级菜单:
             例如:1.男      2.女
    3.    按年龄:请用户输入年龄范围,格式:小值-大值。
             例如:20-25
    4.    按分数:请用户输入分数范围,格式:小值-大值。
             例如:80-100
    4.    根据用户输入,在XML文件中检索出相应的学员信息,并使用Student对象封装,多个Student对象封装到一个ArrayList中;
    5.    遍历ArrayList,为用户显示查询结果;*/
    
    public class ReflectStudent {
    
        public static void main(String[] args) throws Exception {
    
            inputQuery();
        }
    
        private static void inputQuery() throws Exception {
    
            System.out.println("[查询学员]");
            List<String> courseList=new ArrayList<String>();
            Scanner scan = new Scanner(System.in);
            a:while (true) {
                System.out.println();
                System.out.println("1.按学科   2.按性别   3.按年龄   4.按分数    5.退出");
                String key=scan.nextLine();
                switch (key) {
                case "1":
                    System.out.println("继续按学科查询学员~~");
                    
                    SAXReader sax=new SAXReader();
                    Document document = sax.read(new File("students.xml"));
                    Element root =document.getRootElement();
                    List<Element> courses = root.elements("course");
                    for(Element course:courses) {
                        Attribute attribute=course.attribute("name");
                        String courseValue=attribute.getValue();
    //                    System.out.println(courseValue);
                        courseList.add(courseValue);
                    }
                    System.out.println("1.按"+courseList.get(0)+"    2.按"+courseList.get(1));
                    String key_Course=scan.nextLine();
                    switch (key_Course) {
                    case "1":
                        System.out.println("继续按平面设计查询学员~~");
                        for(Element course:courses) {
                            Attribute attribute=course.attribute("name");
                            String courseValue=attribute.getValue();
                            if(courseValue.equals("平面设计")) {
    //                            System.out.println("ok");
                                List<Element> listStudent=course.elements("student");
                                for(Element stu:listStudent) {
                                    String id=stu.attribute("id").getValue();
                                    String name=stu.element("name").getText();
                                    String age=stu.element("age").getText();
                                    String sex=stu.element("sex").getText();
                                    String score=stu.element("score").getText();
                                    //反射得到对象,BeanUtils设置属性进对象
                                    Class clazz=Class.forName("com.swift.kaoshi.Student");
                                    Object obj=clazz.getConstructor().newInstance();
                                    Map<String,String[]> stus=new HashMap<String,String[]>();
                                    stus.put("id", new String[] {id});
                                    stus.put("name", new String[] {name});
                                    stus.put("age", new String[] {age});
                                    stus.put("sex", new String[] {sex});
                                    stus.put("score", new String[] {score});
                                    stus.put("course", new String[] {courseValue});
    //                                System.out.println(stus);
                                    Set<String> set = stus.keySet();
                                    for(String s:set) {
    //                                    System.out.println(s);
    //                                    System.out.println(Arrays.toString(stus.get(s)));
                                    }
                                    BeanUtils.populate(obj, stus);
                                    System.out.println(obj);
                                }
                            }
                        }
                        break;
                    case "2":
                        System.out.println("继续按JavaEE查询学员~~");
                        for(Element course:courses) {
                            Attribute attribute=course.attribute("name");
                            String courseValue=attribute.getValue();
                            if(courseValue.equals("JavaEE")) {
    //                            System.out.println("ok");
                                List<Element> listStudent=course.elements("student");
                                for(Element stu:listStudent) {
                                    String id=stu.attribute("id").getValue();
                                    String name=stu.element("name").getText();
                                    String age=stu.element("age").getText();
                                    String sex=stu.element("sex").getText();
                                    String score=stu.element("score").getText();
                                    //反射得到对象,BeanUtils设置属性进对象
                                    Class clazz=Class.forName("com.swift.kaoshi.Student");
                                    Object obj=clazz.getConstructor().newInstance();
                                    Map<String,String[]> stus=new HashMap<String,String[]>();
                                    stus.put("id", new String[] {id});
                                    stus.put("name", new String[] {name});
                                    stus.put("age", new String[] {age});
                                    stus.put("sex", new String[] {sex});
                                    stus.put("score", new String[] {score});
                                    stus.put("course", new String[] {courseValue});
    //                                System.out.println(stus);
                                    Set<String> set = stus.keySet();
                                    for(String s:set) {
    //                                    System.out.println(s);
    //                                    System.out.println(Arrays.toString(stus.get(s)));
                                    }
                                    BeanUtils.populate(obj, stus);
                                    System.out.println(obj);
                                }
                            }
                        }
                        break;
                        
                    default:
                        System.out.println("抱歉,您输入的数字不符合要求,请重新输入.");
                        break;
                    }
                    
                    break ;
                case "2":
                    System.out.println("继续按性别查询学员~~");
                    break ;
                case "3":
                    System.out.println("继续按年龄查询学员~~");
                    break ;
                case "4":
                    System.out.println("继续按分数查询学员~~");
                    break ;
                case "5":
                    System.out.println("选择结束,退出.");
                    break a;
                default:
                    System.out.println("抱歉,您输入的数字不符合要求,请重新输入.");
                    break;
                }
            }
        }
    }

    使用jar包

     重写上边的程序

    package com.swift.kaoshi;
    
    import java.io.File;
    import java.lang.reflect.InvocationTargetException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Scanner;
    import java.util.Set;
    
    import org.apache.commons.beanutils.BeanUtils;
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    /*
    
    请按以下要求编写代码:
    1.    按XML文档描述创建Student类(注意:包含id字段、科目字段);
    2.    为用户列出菜单:
    【查询学员】
    1.按学科   2.按性别   3.按年龄   4.按分数    5.退出
    3.    用户选择:
    1.    按学科:检索出XML中所有的”学科”名称,并继续列出菜单:
             例如:1.平面设计   2.JavaEE
    2.    按性别:列出性别选择二级菜单:
             例如:1.男      2.女
    3.    按年龄:请用户输入年龄范围,格式:小值-大值。
             例如:20-25
    4.    按分数:请用户输入分数范围,格式:小值-大值。
             例如:80-100
    4.    根据用户输入,在XML文件中检索出相应的学员信息,并使用Student对象封装,多个Student对象封装到一个ArrayList中;
    5.    遍历ArrayList,为用户显示查询结果;*/
    
    public class ReflectStudent {
    
        public static void main(String[] args) throws Exception {
    
            inputQuery();
        }
    
        private static void inputQuery() throws Exception {
    
            System.out.println("[查询学员]");
            List<String> courseList = new ArrayList<String>();
            Scanner scan = new Scanner(System.in);
            SAXReader sax = new SAXReader();
            Document document = sax.read(new File("students.xml"));
            Element root = document.getRootElement();
            List<Element> courses = root.elements("course");
            for (Element course : courses) {
                Attribute attribute = course.attribute("name");
                String courseValue = attribute.getValue();
                // System.out.println(courseValue);
                courseList.add(courseValue);
            }
            a: while (true) {
                System.out.println();
                System.out.println("1.按学科   2.按性别   3.按年龄   4.按分数    5.退出");
                String key = scan.nextLine();
                switch (key) {
                case "1":
                    System.out.println("继续按学科查询学员~~");
                    System.out.println("1.按" + courseList.get(0) + "    2.按" + courseList.get(1));
                    String key_Course = scan.nextLine();
                    switch (key_Course) {
                    case "1":
                        System.out.println("继续按平面设计查询学员~~");
                        for (Element course : courses) {
                            Attribute attribute = course.attribute("name");
                            String courseValue = attribute.getValue();
                            if (courseValue.equals("平面设计")) {
                                // System.out.println("ok");
                                List<Element> listStudent = course.elements("student");
                                beanToObj(course, listStudent);
                            }
                        }
                        break;
                    case "2":
                        System.out.println("继续按JavaEE查询学员~~");
                        for (Element course : courses) {
                            Attribute attribute = course.attribute("name");
                            String courseValue = attribute.getValue();
                            if (courseValue.equals("JavaEE")) {
                                // System.out.println("ok");
                                List<Element> listStudent = course.elements("student");
                                beanToObj(course, listStudent);
                            }
                        }
                        break;
                    default:
                        System.out.println("抱歉,您输入的数字不符合要求,请重新输入.");
                        break;
                    }
                    break;
                case "2":
                    System.out.println("继续按性别查询学员~~");
                    System.out.println("1.按男生    2.按女生");
    
                    String key_Sex = scan.nextLine();
                    switch (key_Sex) {
                    case "1":
                        System.out.println("继续按男生查询学员~~");
                        for (Element course : courses) {
                            List<Element> studentsList = course.elements("student");
                            for (Element stu : studentsList) {
                                Element sex = stu.element("sex");
                                String sexText = sex.getText();
                                if (sexText.equals("男")) {
                                    beanToOneObj(course, stu);
                                }
                            }
                        }
                        break;
                    case "2":
                        System.out.println("继续按JavaEE查询学员~~");
                        for (Element course : courses) {
                            List<Element> studentsList = course.elements("student");
                            for (Element stu : studentsList) {
                                Element sex = stu.element("sex");
                                String sexText = sex.getText();
                                if (sexText.equals("女")) {
                                    beanToOneObj(course, stu);
                                }
                            }
                        }
                        break;
                    default:
                        System.out.println("抱歉,您输入的数字不符合要求,请重新输入.");
                        break;
                    }
                    break;
                case "3":
                    System.out.println("继续按年龄查询学员~~");
                    
                    System.out.println("1.按年龄20-25岁    2.按年龄26-35");
                    String key_age = scan.nextLine();
                    switch (key_age) {
                    case "1":
                        System.out.println("继续按年龄查询学员~~");
                        for (Element course : courses) {
                            List<Element> studentsList = course.elements("student");
                            for (Element stu : studentsList) {
                                Element age = stu.element("age");
                                String ageText = age.getText();
                                if (Integer.parseInt(ageText)>=20&&Integer.parseInt(ageText)<=25) {
                                    beanToOneObj(course, stu);
                                }
                            }
                        }
                        break;
                    case "2":
                        System.out.println("继续按年龄查询学员~~");
                        for (Element course : courses) {
                            List<Element> studentsList = course.elements("student");
                            for (Element stu : studentsList) {
                                Element age = stu.element("age");
                                String ageText = age.getText();
                                if (Integer.parseInt(ageText)>=26&&Integer.parseInt(ageText)<=35) {
                                    beanToOneObj(course, stu);
                                }
                            }
                        }
                        break;
                    default:
                        System.out.println("抱歉,您输入的数字不符合要求,请重新输入.");
                        break;
                    }
                    
                    break;
                case "4":
                    System.out.println("继续按分数查询学员~~");
                    
                    System.out.println("1.按分数60-80岁    2.按年龄80-100");
                    String key_score = scan.nextLine();
                    switch (key_score) {
                    case "1":
                        System.out.println("继续按年龄查询学员~~");
                        for (Element course : courses) {
                            List<Element> studentsList = course.elements("student");
                            for (Element stu : studentsList) {
                                Element score = stu.element("score");
                                String scoreText = score.getText();
                                if (Integer.parseInt(scoreText)>=60&&Integer.parseInt(scoreText)<=80) {
                                    beanToOneObj(course, stu);
                                }
                            }
                        }
                        break;
                    case "2":
                        System.out.println("继续按年龄查询学员~~");
                        for (Element course : courses) {
                            List<Element> studentsList = course.elements("student");
                            for (Element stu : studentsList) {
                                Element score = stu.element("score");
                                String scoreText = score.getText();
                                if (Integer.parseInt(scoreText)>=81&&Integer.parseInt(scoreText)<=100) {
                                    beanToOneObj(course, stu);
                                }
                            }
                        }
                        break;
                    default:
                        System.out.println("抱歉,您输入的数字不符合要求,请重新输入.");
                        break;
                    }
                    
                    break;
                case "5":
                    System.out.println("选择结束,退出.");
                    break a;
                default:
                    System.out.println("抱歉,您输入的数字不符合要求,请重新输入.");
                    break;
                }
            }
        }
    
        private static void beanToOneObj(Element course, Element stu) throws Exception {
    
            String id = stu.attribute("id").getValue();
            String name = stu.element("name").getText();
            String age = stu.element("age").getText();
            String sex = stu.element("sex").getText();
            String score = stu.element("score").getText();
            // 反射得到对象,BeanUtils设置属性进对象
            Class clazz = Class.forName("com.swift.kaoshi.Student");
            Object obj = clazz.getConstructor().newInstance();
            Map<String, String[]> stus = new HashMap<String, String[]>();
            stus.put("id", new String[] { id });
            stus.put("name", new String[] { name });
            stus.put("age", new String[] { age });
            stus.put("sex", new String[] { sex });
            stus.put("score", new String[] { score });
            stus.put("course", new String[] { course.attribute("name").getValue() });
            // System.out.println(stus);
            Set<String> set = stus.keySet();
            for (String s : set) {
                // System.out.println(s);
                // System.out.println(Arrays.toString(stus.get(s)));
            }
            BeanUtils.populate(obj, stus);
            System.out.println(obj);
        }
    
        private static void beanToObj(Element course, List<Element> listStudent) throws Exception {
            for (Element stu : listStudent) {
                beanToOneObj(course, stu);
            }
        }
    }
  • 相关阅读:
    可空类型转换为不可空的普通类型
    如何使用AspNetPager分页控件和ObjectDataSource控件进行分页
    TFS映射后丢失引用的问题
    (很好用)JS时间控件实现日期的多选
    取两个日期之间的非工作日的天数(指的是周六、周日)
    在日期格式化的时候提示错误:Tostring没有采用一个参数的重载
    Linq返回的集合类型不是已有的表格类型时的写法(谨记:列表的时候用)
    系统缓存全解析6:数据库缓存依赖
    实现文本框动态限制字数的实现(好方法)
    实现GridView内容循环滚动
  • 原文地址:https://www.cnblogs.com/qingyundian/p/8552097.html
Copyright © 2011-2022 走看看