DOM4J案例详解(添加 ,查询 ,删除 ,保存)
先看一下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案例详解(添加 ,查询 ,删除 ,保存)的更多相关文章
- 用一个开发案例详解Oracle临时表
用一个开发案例详解Oracle临时表 2016-11-14 bisal ITPUB  一.开发需求 最近有一个开发需求,大致需要先使用主表,或主表和几张子表关联查询出ID(主键)及一些主表字段 ...
- linux route命令的使用详解 添加永久静态路由 tracert traceroute
linux route命令的使用详解 添加永久静态路由 tracert traceroute route -n Linuxroute print Windows traceroute ...
- 第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现
第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现 一. 案例说明 本节将通过一个案例介绍怎么使用property定义快捷的属性访问.案例中使用Rectan ...
- jQuery基础入门+购物车案例详解
jQuery是一个快速.简洁的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是"write Less,Do More",即倡导写更少的代码,做更多 ...
- spring的IOC,DI及案例详解
一:spring的基本特征 Spring是一个非常活跃的开源框架:它是一个基于Core来架构多层JavaEE系统的框架,它的主要目的是简化企业开发.Spring以一种非侵入式的方式来管理你的代码,Sp ...
- 深入浅出 spring-data-elasticsearch - 基本案例详解(三
『 风云说:能分享自己职位的知识的领导是个好领导. 』运行环境:JDK 7 或 8,Maven 3.0+技术栈:SpringBoot 1.5+, Spring Data Elasticsearch ...
- MySQL慢查询(二) - pt-query-digest详解慢查询日志 pt-query-digest 慢日志分析
随笔 - 66 文章 - 0 评论 - 19 MySQL慢查询(二) - pt-query-digest详解慢查询日志 一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它 ...
- spss进行判别分析步骤_spss判别分析结果解释_spss判别分析案例详解
spss进行判别分析步骤_spss判别分析结果解释_spss判别分析案例详解 1.Discriminant Analysis判别分析主对话框 如图 1-1 所示 图 1-1 Discriminant ...
- 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter
上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一. 案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...
随机推荐
- Windows:将cmd命令行添加到右键中方法
win10中将命令行cmd添加到右键的方法 Windows cmd 右键 win10 命令行 最近在学python,所以会用到很多库文件,但是有的库文件需要下载whl文件再通过cmd进行安装,所以每次 ...
- 串的模式匹配和KMP算法
在对字符串的操作中,我们经常要用到子串的查找功能,我们称子串为模式串,模式串在主串中的查找过程我们成为模式匹配,KMP算法就是一个高效的模式匹配算法.KMP算法是蛮力算法的一种改进,下面我们先来介绍蛮 ...
- JS调用WebService,发布到IIS,网页提示WebService未定义[已解决]
VS2013中,JS调用WebService,一直运行正常.部署到WindowsServer2008之后,在网页中访问,始终提示网页中有错误,点开之后发现是WebService未定义. 于是上网查解决 ...
- 机器学习:Python实现单层Rosenblatt感知器
如果对Rosenblatt感知器不了解,可以先查看下相关定义,然后对照下面的代码来理解. 代码中详细解释了各步骤的含义,有些涉及到了数学公式的解释. 这篇文章是以理解Rosenblatt感知器的原理为 ...
- Access SQL实现连续及不连续Rank排名
一.关于起因 在Excel中我们经常使用Rank函数对数据进行排名操作.而在Access中我们要进行排名是找不到这个Rank函数的,此时我们需要自己书写VBA代码或者建立SQL查询来完成排序操作. 今 ...
- 老李推荐:第6章4节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-翻译命令字串
老李推荐:第6章4节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-翻译命令字串 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自 ...
- 手机自动化测试:appium源码分析之bootstrap九
手机自动化测试:appium源码分析之bootstrap九 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣, ...
- 老李推荐: 第3章1节《MonkeyRunner源码剖析》脚本编写示例: MonkeyRunner API使用示例
老李推荐: 第3章1节<MonkeyRunner源码剖析>脚本编写示例: MonkeyRunner API使用示例 MonkeyRunner这个类可以说是编写monkeyrunner脚 ...
- C语言编码风格_集锦_1
参考原地址: http://www.jb51.net/article/79257.htm <一> 在一个标准的C语言程序中, 最特殊的莫过于main函数了. 函数大体上分为内联函数(C99 ...
- 给 Java 学习者的超全教程整理
Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...