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代码, ...
随机推荐
- C++常用数据结构(对照python)
python: c++17: get set extend/update find index size loop list std::vector v[0]; v.emplace_back(&quo ...
- Linux安装phpMyAdmin配置管理多个数据库
1.下载 :phpMyAdmin 2.解压安装包: tar -zxvf phpMyAdmin-4.6.5.2-all-languages.tar.gz 3.替换目录 : mv phpMyAdmin-4 ...
- Java Executors小结
一 Executors提供了一系列工厂方法用于创先线程池ThreadPoolExecutor线程池的具体实现类,一般用的各种线程池都是基于这个类实现的 返回的线程池都实现了ExecutorServic ...
- 纯CSS控制背景图片100%自适应填充布局
https://blog.csdn.net/wd4java/article/details/50537562 解决: html,body{height: 100%;width: 100%;marg ...
- MySQL设置允许用户远程登录
. //登录数据库 mysql -u root -pvmwaremysql>use mysql; //%为所有ip都可以远程访问 mysql>update user set host = ...
- DotNetty 跨平台的网络通信库(转)
久以来,.Net开发人员都非常羡慕Java有Netty这样,高效,稳定又易用的网络通信基础框架.终于微软的Azure团队,使用C#实现的Netty的版本发布.不但使用了C#和.Net平台的技术特点,并 ...
- ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务解决办法
ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务解决办法: 1.首先打开cmd命令 查看本地TNSPING配置 是否ok?然后找到 Oracle 安装文件 中 listener. ...
- jQuery中的节点操作(二)
html代码如下 <p title="武汉长乐教育PHP系列教程" name="hello" class="blue"> < ...
- 零基础逆向工程35_Win32_09_临界区_CRITICAL_SECTION结构
1 引入 为什么会存在临界区这中机制呢?是为多线程同时访问全局变量而引入的.也就是上一篇帖子的末尾流出的问题程序的解决办法. 看懂了上面的,那么我们再罗嗦总结一下: 1.多线程访问全局变量时,存在线程 ...
- u-boot分析(五)----I/D cache失效|关闭MMU和cache|关闭看门狗
u-boot分析(五) 上篇博文我们按照210的启动流程,对u-boot启动中的设置异常向量表,设置SVC模式进行了分析,今天我们继续按照u-boot的启动流程对以下内容进行分析. 今天我们会用到的文 ...