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);
}
}
}
java XML 通过BeanUtils的population为对象赋值 根据用户选择进行dom4j解析的更多相关文章
- Java进阶(二十七)使用Dom4j解析XML文件
使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...
- dom4j解析xml文档全面介绍
一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...
- 源生API解析XML文档与dom4j解析XML文档
一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...
- DI,依赖注入,给对象赋值 ,get,set
DI,依赖注入,给对象赋值 ,get,set给对象赋值 2种方式:1.get.set默认无参构造方法给对象赋值 2.xml中有参构造器方法给对象赋值
- dom4j解析xml时报出文件提前结束
在写javaweb小项目的时候,用dom4j解析xml报出如下错误: org.dom4j.DocumentException:Error ....... Nested exception: ...
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- java中采用dom4j解析xml文件
一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...
- 转:在java中使用dom4j解析xml
JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...
- java使用dom4j解析xml文件
关于xml的知识,及作用什么的就不说了,直接解释如何使用dom4j解析.假如有如下xml: dom4j解析xml其实很简单,只要你有点java基础,知道xml文件.结合下面的xml文件和java代码, ...
随机推荐
- VS 快速插入无参构造器
输入ctor后 点击两次Tab键,即可快速插入无参构造器.
- override javascript escape funcation
var oldescape = window.escape; escape = function (sStr) { return oldescape(sStr).replace(/\+/g, '%2B ...
- apache配置多端口对应多个虚拟目录
经常需要在本地调试网站,却又不喜欢在http://localhost/网站的文件夹名 且几个比较重要的项目我想直接用端口号以示区分,想达到的效果如下: http://localhost/ 默认80端口 ...
- 高精度运算——java
java大法 java的框架. import java.io.*; import java.util.*; import java.math.*; public class Main{ public ...
- java环境下wsimport编译Wsdl
使用命令提示符进行操作:首先CD至java jdk/bin目录下.先bin目录下执行以下命令即可: -----------------------------服务需求放置的位置------------ ...
- 最小白的webpack+react环境搭建
本文也同步发表在我的公众号“我的天空” 从零开始,用最少的配置.最少的代码.最少的依赖来搭建一个最简单的webpack+react环境. 最近在玩webpack+react+移动端,那么第一步自然是搭 ...
- InvocationTargetException异常
package com.smbea.demo.reflect; /** * 越界异常 * @author hapday * @date 2017年1月20日 @time下午7:59:01 */ pub ...
- js 判断浏览器类型
前言 工作中需要用到判断浏览器类型,网上找到的内容不怎么全,故在此进行一下总结. 一.不同浏览器及版本下User-Agent信息 待续.....欢迎补充 二.根据User-Agent信息进行判断 参考 ...
- Javascript基础--函数(Function对象)
1.函数是一段可执行的代码,函数可多次调用,模块化管理. 2.使用function语句,function funName([arg1][,arg2]....[,argn]){代码块}.所有版本可用,一 ...
- SPFieldLookupValue class
using System; using Microsoft.SharePoint; namespace ConsoleApp { class Program { static void Main(st ...