根据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解析的更多相关文章

  1. Java进阶(二十七)使用Dom4j解析XML文件

    使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...

  2. dom4j解析xml文档全面介绍

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

  3. 源生API解析XML文档与dom4j解析XML文档

    一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...

  4. DI,依赖注入,给对象赋值 ,get,set

    DI,依赖注入,给对象赋值 ,get,set给对象赋值 2种方式:1.get.set默认无参构造方法给对象赋值 2.xml中有参构造器方法给对象赋值

  5. dom4j解析xml时报出文件提前结束

    在写javaweb小项目的时候,用dom4j解析xml报出如下错误: org.dom4j.DocumentException:Error    .......    Nested exception: ...

  6. [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  8. 转:在java中使用dom4j解析xml

    JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...

  9. java使用dom4j解析xml文件

    关于xml的知识,及作用什么的就不说了,直接解释如何使用dom4j解析.假如有如下xml: dom4j解析xml其实很简单,只要你有点java基础,知道xml文件.结合下面的xml文件和java代码, ...

随机推荐

  1. keil版本控制

    keil5.15才有对git svn的支持,之前的有其它的svcs;   http://www.keil.com/appnotes/files/apnt_279.pdf http://stdbit.c ...

  2. (转)rsync数据备份方案

    rsync数据备份方案 原文:http://blog.51cto.com/irow10/1826458 最近整理了下公司的数据备份情况.以下是部分操作的过程 1.rsync数据备份,具体备份过程就不详 ...

  3. 断路器hystrix

    分布式系统中不可避免的会出现一些故障,因为服务间错综复杂的依赖关系,有时候一个服务出现问题后,会导致依赖于它的服务出现远程调度的线程受阻,给服务造成压力,当然同样的,祖父级调用者(暂且这么叫吧)当然也 ...

  4. 二叉排序树思想及C语言实现

    转自: http://blog.chinaunix.net/uid-22663647-id-1771796.html 1.二叉排序树的定义 二叉排序树(Binary Sort Tree)又称二叉查找( ...

  5. mongodb 用户权限控制

    MongoDB已经使用很长一段时间了,基于MongoDB的数据存储也一直没有使用到权限访问(MongoDB默认设置为无权限访问限制),今天特地花了一点时间研究了一下,研究成果如下: 注:研究成果基于W ...

  6. StreamWrite类

    FileStream类,该对象只能以字节形式读取/写入数据,这就使得操作非常困难. 一般有了FileStream对象,都会借用StreamWrite对象或StreamReader对象的方法来处理文件. ...

  7. JS获取前一个页面

    document.referrer 可以得到上一个点击超连接进来的页面URL注意:只能访问服务器上页面使用,打开本地文件无效(为空字符串)

  8. 拼json对象批量向后台添加数据

    网站中如果遇到批量提交格式相同数据,可以使用json来传输 $("#catalogSave").click(function(){ var array=[]; $("[n ...

  9. MySQL之my.cnf配置

    ####################配置文件开始################### # For advice on how to change settings please see # ht ...

  10. MySQL子查询有哪五种形式?

    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品.MySQL是最流行的关系型数据库管理系统之一,在web应用方面,MySQL是最好的RDBMS(Rela ...