根据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;}@Overridepublic 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);}}
}

转载于:https://www.cnblogs.com/qingyundian/p/8552097.html

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

  1. dom4j解析xml,dom4j创建xml

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...

  2. dom4j 解析 xml 为 Java 对象

    引入的 jar 包 xml 文件 <?xml version="1.0" encoding="UTF-8" ?> <books>< ...

  3. java dom4j解析xml 对象_Java XML解析 - 利用DOM4j解析XML

    Java XML解析 - 利用DOM4j解析XML dom4j是一个简单的开源库,用于处理XML. XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP ...

  4. Java XML解析器

    使用Apache Xerces解析XML文档 一.技术概述 在用Java解析XML时候,一般都使用现成XML解析器来完成,自己编码解析是一件很棘手的问题,对程序员要求很高,一般也没有专业厂商或者开源组 ...

  5. java xml 学习_java学习(四)xml

    1.xml文件 xml(可扩展标签语言,标签自定义,用来存储数据以及配置文件).书写规范为: 1)区分大小写: 2)应该有一个跟标签: 3)标签必须关闭:如 4)属性必须用引号引起来:如: 5)标签体 ...

  6. java xml特殊字符处理_dom4j特殊字符处理

    dom4j特殊字符处理 问题: 最近在做项目时,遇到了解析xml问题. 使用dom4j解析xml信息时,如果属性值中包含&等特殊字符时,解析会提示如下异常: java.lang.Runtime ...

  7. DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...

    Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM开发的.与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了 ...

  8. Java XML解析工具 JDOM介绍及使用实例

    Java XML解析工具 JDOM JDOM介绍 JDOM是一种使用XML的独特Java工具包,用于快速开发XML应用程序. 它的设计包含Java语言的语法乃至语义. JDOM是一个开源项目,它基于树 ...

  9. Java xml 工具 JDOM 使用详解.

    一, 什么是JDOM工具 在编程中, 我们往往需要一些配置数据,  这些值我们一般不会hardcode在代码中的. 而是写在配置文件. 在Java世界中, 我们通常会把配置变量写在xml文件中. 而x ...

  10. java xml 反射_Java 读取XML文件以及Java 的反射机制实现

    Java 读取XML文件以及Java 的反射机制实现 代码部分 import java.io.File; import javax.xml.parsers.DocumentBuilder; impor ...

最新文章

  1. 2018-3-2线性表
  2. Spring MVC ajax:post/get 的具体实现
  3. [云炬创业基础笔记]第一章创业环境测试10
  4. 桌面级linux推荐,七大顶级桌面比较!Linux平台自由选择
  5. java jni helloword_JNI入门教程之HelloWorld篇
  6. 关于 RGB 的颜色认知
  7. 设计模式笔记二十五:访问者模式
  8. shell基础之综合练习
  9. Java导出导入Excel方法
  10. windows批处理脚本bat命令解析【10】如何运行cmd命令3bat批处理文件中的注释
  11. 无人驾驶服务器适合部署在以下哪个位置,适用于无人驾驶的分布式仿真平台
  12. [QT] QT加载百度离线地图(二)
  13. 招聘信息-明源软件欢迎您的加入
  14. python 会计分录模板_常见会计分录大全(15种小企业模板)
  15. angular ngOnInit 与constructor
  16. 最全的计算机会议排名
  17. 数据链路层---差错检测和纠正
  18. 抽象类和接口的区别(精简)
  19. Linux下C语言串口应用编程
  20. 薛定谔 | 小分子叠合

热门文章

  1. POJ 2778 DNA Sequence (Aho-Corasick 矩阵优化) - xgtao -
  2. 混合使用UITabBarController和UINavigationController
  3. github 分支 合并
  4. Costomize Print Output
  5. SharePoint 2013—创建Master Page
  6. 如何检查Windows网络通信端口占用
  7. 添加css单词换行连字符
  8. Spring,Mybatis,Springmvc框架整合项目(第一部分)
  9. 第一百六十三节,jQuery,基础核心
  10. WinForm------GridControl添加底部合计框