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;}@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解析相关推荐
- dom4j解析xml,dom4j创建xml
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...
- dom4j 解析 xml 为 Java 对象
引入的 jar 包 xml 文件 <?xml version="1.0" encoding="UTF-8" ?> <books>< ...
- java dom4j解析xml 对象_Java XML解析 - 利用DOM4j解析XML
Java XML解析 - 利用DOM4j解析XML dom4j是一个简单的开源库,用于处理XML. XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP ...
- Java XML解析器
使用Apache Xerces解析XML文档 一.技术概述 在用Java解析XML时候,一般都使用现成XML解析器来完成,自己编码解析是一件很棘手的问题,对程序员要求很高,一般也没有专业厂商或者开源组 ...
- java xml 学习_java学习(四)xml
1.xml文件 xml(可扩展标签语言,标签自定义,用来存储数据以及配置文件).书写规范为: 1)区分大小写: 2)应该有一个跟标签: 3)标签必须关闭:如 4)属性必须用引号引起来:如: 5)标签体 ...
- java xml特殊字符处理_dom4j特殊字符处理
dom4j特殊字符处理 问题: 最近在做项目时,遇到了解析xml问题. 使用dom4j解析xml信息时,如果属性值中包含&等特殊字符时,解析会提示如下异常: java.lang.Runtime ...
- DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...
Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM开发的.与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了 ...
- Java XML解析工具 JDOM介绍及使用实例
Java XML解析工具 JDOM JDOM介绍 JDOM是一种使用XML的独特Java工具包,用于快速开发XML应用程序. 它的设计包含Java语言的语法乃至语义. JDOM是一个开源项目,它基于树 ...
- Java xml 工具 JDOM 使用详解.
一, 什么是JDOM工具 在编程中, 我们往往需要一些配置数据, 这些值我们一般不会hardcode在代码中的. 而是写在配置文件. 在Java世界中, 我们通常会把配置变量写在xml文件中. 而x ...
- java xml 反射_Java 读取XML文件以及Java 的反射机制实现
Java 读取XML文件以及Java 的反射机制实现 代码部分 import java.io.File; import javax.xml.parsers.DocumentBuilder; impor ...
最新文章
- 2018-3-2线性表
- Spring MVC ajax:post/get 的具体实现
- [云炬创业基础笔记]第一章创业环境测试10
- 桌面级linux推荐,七大顶级桌面比较!Linux平台自由选择
- java jni helloword_JNI入门教程之HelloWorld篇
- 关于 RGB 的颜色认知
- 设计模式笔记二十五:访问者模式
- shell基础之综合练习
- Java导出导入Excel方法
- windows批处理脚本bat命令解析【10】如何运行cmd命令3bat批处理文件中的注释
- 无人驾驶服务器适合部署在以下哪个位置,适用于无人驾驶的分布式仿真平台
- [QT] QT加载百度离线地图(二)
- 招聘信息-明源软件欢迎您的加入
- python 会计分录模板_常见会计分录大全(15种小企业模板)
- angular ngOnInit 与constructor
- 最全的计算机会议排名
- 数据链路层---差错检测和纠正
- 抽象类和接口的区别(精简)
- Linux下C语言串口应用编程
- 薛定谔 | 小分子叠合
热门文章
- POJ 2778 DNA Sequence (Aho-Corasick 矩阵优化) - xgtao -
- 混合使用UITabBarController和UINavigationController
- github 分支 合并
- Costomize Print Output
- SharePoint 2013—创建Master Page
- 如何检查Windows网络通信端口占用
- 添加css单词换行连字符
- Spring,Mybatis,Springmvc框架整合项目(第一部分)
- 第一百六十三节,jQuery,基础核心
- WinForm------GridControl添加底部合计框