欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java XML 通过BeanUtils的population为对象赋值 根据用户选择进行dom4j解析

程序员文章站 2022-04-18 10:42:44
根据xml文件设计Student对象 设计学生类 根据菜单进行解析 使用jar包 ......

根据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包

java XML 通过BeanUtils的population为对象赋值 根据用户选择进行dom4j解析