先看一下XML文档

<?xml version="1.0" encoding="gb2312"?>
<exam>
<student idcard="111" examid="222">
<name>张三</name>
<location>深圳</location>
<score>89</score>
</student>
<student idcard="777" examid="666">
<name>李四</name>
<location>上海</location>
<score>99</score>
</student>
</exam>

主要是对此文档读取,添加,删除,保存(刷新)等处理实现下面的功能

首先要建立一个学生的实体类

 public class Student {
private String name;
private String examid;//准考证号
private String idcard;//身份证号
private String location;//地址
private String score; //分数 public Student(){ //无参构造
} public Student(String name, String examid, String idcard, String location,
String score) { //有参构造
super();
this.name = name;
this.examid = examid;
this.idcard = idcard;
this.location = location;
this.score = score;
}
//下面是set get 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getExamid() {
return examid;
}
public void setExamid(String examid) {
this.examid = examid;
}
public String getIdcard() {
return idcard;
}
public void setIdcard(String idcard) {
this.idcard = idcard;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getScore() {
return score;
}
public void setScore(String score) {
this.score = score;
} }//类的

然后建立一个接口类,里面添加的方法分别是(添加,删除,读取)

 public interface AddStu {
/**
* 添加学生
*/
public boolean addStudent(Student stu);
/**
* 删除学生
*/
public boolean removeStudent(String name);
/**
* 查询学生
*/
public Student caxunStudent(String examid);
}

然后是实现接口的类

 public class AddStuimpl implements AddStu{

     @Override
public boolean addStudent(Student stu) {
boolean flay=false;
Document dom=null;
//1.创建解析器
SAXReader reader = new SAXReader();
//2.解析文档
try {
dom = reader.read(new File("src/student.xml"));
Element rootElement=dom.getRootElement();
//添加元素
Element stuEle=rootElement.addElement("student");
stuEle.addAttribute("idcard", stu.getIdcard());
stuEle.addAttribute("examid", stu.getExamid());
//添加子节点
stuEle.addElement("name").setText(stu.getName());
stuEle.addElement("location").setText(stu.getLocation());
stuEle.addElement("score").setText(stu.getScore());
//更新XML (保存信息)
OutputFormat of=OutputFormat.createPrettyPrint();//格式化器
of.setEncoding("gb2312");
XMLWriter xw=new XMLWriter(new FileWriter("src/student.xml"),of);
xw.write(dom);
xw.close(); flay=true;
} catch (Exception e) {
e.printStackTrace();
} return flay; } @Override
public boolean removeStudent(String name) {
boolean flay=false;
Document dom=null;
//1.创建解析器
SAXReader reader = new SAXReader();
//2.解析文档 try {
dom = reader.read(new File("src/student.xml"));
Element root=dom.getRootElement(); //获取根节点
List<Element> list=root.elements("student"); //选择要对哪个元素进行操作
for (Element e : list) {
Element nameEle=e.element("name");
if(nameEle.getText().equals(name)){
root.remove(e);
flay=true;
} }
//更新
OutputFormat of=OutputFormat.createPrettyPrint();//格式化器
of.setEncoding("gb2312");
XMLWriter xw=new XMLWriter(new FileWriter("src/student.xml"),of);
xw.write(dom);
xw.close(); } catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return flay;
} @Override
public Student caxunStudent(String examid) {
Student s=null;
Document dom=null;
//1.创建解析器
SAXReader reader = new SAXReader();
//2.解析文档
try {
dom = reader.read(new File("src/student.xml"));
Element root=dom.getRootElement(); //获取根节点
List<Element> list=root.elements("student");
Element ele=null;
for (Element e : list) {
String str2=e.attribute("examid").getText();
//String str2=e.attributeValue("examid"); 与上一条意思一样
if(str2.equals(examid)){
ele=e;
break;
}
}
if(ele!=null){
String name=ele.elementText("name");
String location=ele.element("location").getText();
String score=ele.elementText("score");
String idcard=ele.attributeValue("idcard");
String examid1=ele.attributeValue("examid");
s=new Student(name, examid1, idcard, location, score);
}
} catch (DocumentException e) { e.printStackTrace();
}
return s;
} }

最后则是测试类及对添加等方法的测试

 /**
* 测试
* 2017-5-3
*下午2:40:47
*/
public class StudentBiz {
//static Student stu=new Student();
static Scanner input=new Scanner(System.in);
static AddStuimpl asi=new AddStuimpl();
public static void main(String[] args) {
System.out.println("添加学生(1)\t删除学生(2)\t查询成绩(3)\t退出(4)");
do{
System.out.print("请选择有效序号: ");
int a=input.nextInt();
switch(a){
case 1:
System.out.println("请输入学生的姓名");
String name=input.next();
System.out.println("请输入学生的准考证号");
String examid=input.next();
System.out.println("请输入学生的身份证号");
String idcard=input.next();
System.out.println("请输入学生的所在地");
String location=input.next();
System.out.println("请输入学生的成绩");
String score=input.next();
Student stu=new Student(name, examid, idcard, location, score); boolean bool=asi.addStudent(stu);
if(bool){
System.out.println("学生添加成功");
}else{
System.out.println("添加失败");
} continue;
case 2:
System.out.println("请输入要删除的学生姓名");
String removeName=input.next();
Student stu2=new Student();
//stu2.setName(removeName); RemoveStuImpl re=new RemoveStuImpl();
//boolean bool2=re.removeStu(stu2);
boolean bool2=asi.removeStudent(removeName);
if(bool2){
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
continue;
case 3:
System.out.println("请输入学生考号");
String examid1=input.next();
Student stu3=asi.caxunStudent(examid1);
if(stu3!=null){
System.out.println("学生的身份证是"+stu3.getIdcard()+",准考证"+stu3.getExamid()+
",姓名"+stu3.getName()+",分数是: "+stu3.getScore()+",地址"+stu3.getLocation());
}else{
System.out.println("查无此人");
}
continue;
case 4:
System.out.println("系统退出");
break;
}
break;
}while(true); }
}

本文没有使用工具类,后续可自行添加!!!!!

DOM4J案例详解(添加 ,查询 ,删除 ,保存)的更多相关文章

  1. ​ 用一个开发案例详解Oracle临时表

    ​ 用一个开发案例详解Oracle临时表 2016-11-14 bisal ITPUB  一.开发需求  最近有一个开发需求,大致需要先使用主表,或主表和几张子表关联查询出ID(主键)及一些主表字段 ...

  2. linux route命令的使用详解 添加永久静态路由 tracert traceroute

    linux route命令的使用详解 添加永久静态路由  tracert  traceroute route -n    Linuxroute  print  Windows traceroute  ...

  3. 第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现

    第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现 一.    案例说明 本节将通过一个案例介绍怎么使用property定义快捷的属性访问.案例中使用Rectan ...

  4. jQuery基础入门+购物车案例详解

    jQuery是一个快速.简洁的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是"write Less,Do More",即倡导写更少的代码,做更多 ...

  5. spring的IOC,DI及案例详解

    一:spring的基本特征 Spring是一个非常活跃的开源框架:它是一个基于Core来架构多层JavaEE系统的框架,它的主要目的是简化企业开发.Spring以一种非侵入式的方式来管理你的代码,Sp ...

  6. 深入浅出 spring-data-elasticsearch - 基本案例详解(三

    『  风云说:能分享自己职位的知识的领导是个好领导. 』运行环境:JDK 7 或 8,Maven 3.0+技术栈:SpringBoot 1.5+, Spring Data Elasticsearch ...

  7. MySQL慢查询(二) - pt-query-digest详解慢查询日志 pt-query-digest 慢日志分析

    随笔 - 66 文章 - 0 评论 - 19 MySQL慢查询(二) - pt-query-digest详解慢查询日志 一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它 ...

  8. spss进行判别分析步骤_spss判别分析结果解释_spss判别分析案例详解

    spss进行判别分析步骤_spss判别分析结果解释_spss判别分析案例详解 1.Discriminant Analysis判别分析主对话框 如图 1-1 所示 图 1-1 Discriminant ...

  9. 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter

    上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一.    案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...

随机推荐

  1. quartz笔记

    首先网络上的很多教程经常有错(信息过载了),其主要原因是版本发生了变化,例如quartz1和2之间还是有不少差别的,导致查找资料的人浪费了不少时间.所以无论教程如何写,都建议读者首先学习官网的教程,如 ...

  2. c++学习笔记之封装篇(上)

    title: c++学习笔记之封装篇(上) date: 2017-03-12 18:59:01 tags: [c++,c,封装,类] categories: [学习,程序员,c/c++] --- 一. ...

  3. keystone无法查看catalog并且用户无法申请令牌的解决方案

    在运行openstack catalog list之后提示: Only an authorized user may issue a new token. #只有授权用户才能申请token opens ...

  4. Spark踩坑记——共享变量

    [TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...

  5. Java web的几种异常处理 (转)

    一.在servlet容器中处理异常 以下两种方式: 1. 在web.xml定义异常处理  如果没有在web的应用中作异常处理,那么异常就会抛给Servlet容器,应该说此时Servlet容器是处理异常 ...

  6. WebStorm里使用注意点

    归纳一些我在使用webstorm里遇到的问题: 1.问题:文件出现红线,如图 解决方案:可能是由于语言版本的问题,改一下版本试试 2.快捷键:http://www.cnblogs.com/yeming ...

  7. JavaWeb之cookie

    什么叫做会话 ? 用户从打开一个浏览器开始,浏览器网站,到关闭浏览器的整个过程叫做一次会话! 每个用户与服务器进行交互的过程中,各自会有一些数据,程序要想办法保存每个用户的数据. 例如:用户点击超链接 ...

  8. js控制滚动条默认在底部

    html: <div id="chat_content" class="chat_content">                    < ...

  9. 浏览器访问php脚本通过sendmail用mail函数发送邮件

    前几天做项目遇到这样的一个问题:当某一个结点下有新的文章发表的时候,以邮件的形式通知该结点下的所有用户.这就需要用到邮件发送的功能. 因为项目是php语言做的,所以最简单的方法就是使用php自带的函数 ...

  10. POST与GET

    面试如果被问到这个问题,相信很多人都是会心一笑,答案随口而来: 1.GET在浏览器回退时是无害的,而POST会再次提交请求. 2.GET请求会被浏览器主动cache,而POST不会,除非手动设置. 3 ...