XML基础综合案例【三】
实现简单的学生管理系统
使用xml当做数据,存储学生信息
** 创建一个xml文件,写一些学生信息
** 增加操作
1、创建解析器
2、得到document
3、获取到根节点
4、在根节点上面创建stu标签
5、在stu标签上面依次添加id name age
** addElement方法添加
6、在id name age上面依次添加值
** setText方法
7、回写xml
** 删除操作(根据id删除)
1、创建解析器
2、得到document
3、获取到所有的id
使用xpath //id 返回 list集合
4、遍历list集合
5、判断集合里面的id和传递的id是否相同
6、如果相同,把id所在的stu删除
** 查询操作(根据id查询)
1、创建解析器
2、得到document
3、获取到所有的id
4、返回的是list集合,遍历list集合
5、得到每一个id的节点
6、id节点的值
7、判断id的值和传递的id值是否相同
8、如果相同,先获取到id的父节点stu
9、通过stu获取到name age值
** 把这些值封装到一个对象里面 返回对象
stuService:主要类,用于操作学生基本信息类[添加、删除、查询]
Student:封装了学生基本信息
testStu:主函数,测试类
StudentUtils:封装的工具类[dom4j解析器,回写xml文件方法]
student.xml:数据的交换
导入:dom4j和XPath架包
整体结构:

e-code【stuService】
package boom.service; import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Path;
import java.text.Format;
import java.util.List; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; import boom.student.Student;
import boom.utils.StudentUtils; /***
* 操作学生基本信息类
* @author Administrator
*
*/
public class stuService {
/**
* 添加
* @param student
* @throws Exception
*/
public static void addStu(Student student) throws Exception{
/*// 创建解析器
SAXReader saxReader = new SAXReader();
// 得到document
Document document = saxReader.read("src/student.xml");*/
Document document = StudentUtils.getDocument(StudentUtils.PATH); // 得到根节点
Element root = document.getRootElement();
// 在根节点上创建stu标签
Element stu = root.addElement("stu");
// 在stu标签上创建学生属性
Element id1 = stu.addElement("id");
Element name1 = stu.addElement("name");
Element age1 = stu.addElement("age");
// 在id name age属性上设置属性值
id1.setText(student.getId());
name1.setText(student.getName());
age1.setText(student.getAge());
// 回写xml文件
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/student.xml"), format);
xmlWriter.write(document);
xmlWriter.close();
}
/**
* 删除学生(根据id删除)
* @param student
* @throws Exception
*/
public static void delStu(String id) throws Exception{
/*// 创建解析器
SAXReader saxReader = new SAXReader();
// 得到document
Document document = saxReader.read("src/student.xml");*/
Document document = StudentUtils.getDocument(StudentUtils.PATH); // 得到所有的id(XPath去获取)
List<Node> list = document.selectNodes("//id");
// 遍历list集合
for (Node node : list) {// node是每个id的元素
// 得到ID的值
String ID = node.getText();
// 判断ID是否与传递进来的id值是否
if(ID.equals(id)) { // id相同
// 得到stu的父节点
Element stu = node.getParent();
// 获取stu父节点(得到student根节点)
Element student = stu.getParent();
student.remove(stu);
}
}
// 回写xml文件
/*OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/student.xml"), format);
xmlWriter.write(document);
xmlWriter.close();*/
StudentUtils.xmlWriter(StudentUtils.PATH,document);
}
/**
* 查询学生(根据id)
* @param id
* @throws Exception
*/
public static Student getStu(String id) throws Exception{
// 创建解析器并得到document
Document document = StudentUtils.getDocument(StudentUtils.PATH);
// 获取所有的id
List<Node> list = document.selectNodes("//id");
// 创建student对象
Student student = new Student();
// 遍历list
for (Node node : list) {
// 的到id节点的值
String ID = node.getText();
// 判断id是否相同
if(ID.equals(id)) {
// 得到id的父节点stu
Element stu = node.getParent();
// 通过stu获取到name age值
String name = stu.element("name").getText();
String age = stu.element("age").getText();
// 对象里设置值
student.setId(id);
student.setName(name);
student.setAge(age);
}
}
// 返回
return student;
} }
e-code【Student】
package boom.student;
/**
* 封装学生基本信息
* @author Administrator
*
*/
public class Student {
private String id;
private String name;
private String age; // 生成get set方法
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 String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
} }
e-code【TestStu】
package boom.test; import boom.service.stuService;
import boom.student.Student; public class TestStu { /**
* 测试类
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// testAdd();
// testDel();
testSelect();
}
/**
* 查询方法
* @throws Exception
*/
public static void testSelect() throws Exception{
Student stu = stuService.getStu("2015112402");
System.out.println(stu.toString());
}
/**
* 删除方法
* @throws Exception
*/
public static void testDel() throws Exception{
stuService.delStu("2015112403"); }
/**
* 添加方法
* @throws Exception
*/
public static void testAdd() throws Exception{
// 创建学生对象并设置值
Student stu = new Student();// 对象被封装在Student类里
stu.setId("2015112403");
stu.setName("大兄逮");
stu.setAge("18");
// 调用操作学生类[stuService]
stuService.addStu(stu);
} }
e-code【StudentUtils】
package boom.utils; import java.io.FileOutputStream; import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class StudentUtils {
public static final String PATH = "src/student.xml"; // 返回document
public static Document getDocument(String path) {
try {
// 创建解析器
SAXReader reader = new SAXReader();
// 得到document
Document document = reader.read(path);
return document;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} // 回写xml的方法
public static void xmlWriter(String path, Document document) {
try {
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(path),format);
xmlWriter.write(document);
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
student,xml
XML基础综合案例【三】的更多相关文章
- 好客租房40-react组件基础综合案例-案例需求分析
实现 案例的数据 渲染评论列表 有评论 没有评论 暂无评论 获取评论信息 包括评论人和受控组件 发表评论 更新评论 //导入react import React from 'react' import ...
- 好客租房43-react组件基础综合案例-4获取评论信息
获取评论信息 1使用受控组件方式创建表单 //导入react import React from 'react' import ReactDOM from 'react-dom' //导入组件 // ...
- 好客租房44-react组件基础综合案例-5发表评论-1
发表评论 1给按钮绑定点击事件 2在事件处理程序中 通过state获取评论信息 3将评论信息添加到state中 并调用setState()方法更新数据 //导入react import React f ...
- 好客租房45-react组件基础综合案例-6边界问题
边界问题 //导入react import React from 'react' import ReactDOM from 'react-dom' //导入组件 // 约定1:类组件必须以大写字母开头 ...
- 好客租房41-react组件基础综合案例-渲染列表数据
1渲染列表 在state定义数据 进行数据渲染 //导入react import React from 'react' import ReactDOM from 'react-dom' //导入组件 ...
- 好客租房42-react组件基础综合案例-渲染列表无数据并优化
渲染列表评论 1判断列表数据的长度是否为0 2如果为0 则渲染暂无评论 //导入react import React from 'react' import ReactDOM from 'react- ...
- spring基础:什么是框架,框架优势,spring优势,耦合内聚,什么是Ioc,IOC配置,set注入,第三方资源配置,综合案例spring整合mybatis实现
知识点梳理 课堂讲义 1)Spring简介 1.1)什么是框架 源自于建筑学,隶属土木工程,后发展到软件工程领域 软件工程中框架的特点: 经过验证 具有一定功能 半成品 1.2)框架的优势 提高开发效 ...
- springAop:Aop(Xml)配置,Aop注解配置,spring_Aop综合案例,Aop底层原理分析
知识点梳理 课堂讲义 0)回顾Spring体系结构 Spring的两个核心:IoC和AOP 1)AOP简介 1.1)OOP开发思路 OOP规定程序开发以类为模型,一切围绕对象进行,OOP中完成某个任务 ...
- Java11-java基础语法(十)类设计综合案例
Java11-java语法基础(十)类设计综合案例 一.类综合设计方法 1.类设计步骤 (1)分析数据成员 (2)分析成员方法和构造方法 (3)画出类图 (4)编码测试 2.具体问题 1)分析数据成员 ...
随机推荐
- Mysql——常用命令
查看版本:show variables like '%version%' 或者 select version() 是否开启binlog:show variables like 'log_bin ...
- 转:微服务框架之微软Service Fabric
常见的微服务架构用到的软件&组件: docker(成熟应用) spring boot % spring cloud(技术趋势) Service Fabric(属于后起之秀 背后是微软云的驱动) ...
- v-for与v-if的优先级
原文地址 永远不要把 v-if 和 v-for 同时用在同一个元素上. 一般我们在两种常见的情况下会倾向于这样做: 为了过滤一个列表中的项目 (比如 v-for="user in users ...
- vscode中如何加eslint检查工具
代码的质量对开发人员个人的成长以及公司的发展至关重要,所以如何使用把控代码的质量是大家经常思考的问题.除了代码审核之外,代码检查工具成了把控代码质量的第一道门槛,非常好用,可以建立一些团队约定的代码风 ...
- python-Web-django-后台
url: # member 处理 re_path('member/list/', member.list, name='member/list/'), re_path('member/list_par ...
- 2019年最新Web安全攻防班课程
咨询请加QQ:1373721311 或 2644148223 课程核心大纲总览 Web安全攻防班以业界权威的OWASP TOP 10的漏洞为主干课程.更加详细教学思维导图可访问如下链接:https:/ ...
- 【C/C++开发】try-cache-finnally捕获异常
在c++中,可以直接抛出异常之后自己进行捕捉处理,如:(这样就可以在任何自己得到不想要的结果的时候进行中断,比如在进行数据库事务操作的时候,如果某一个语句返回SQL_ERROR则直接抛出异常,在cat ...
- JS中常用的语法
在做前端中,JS的语法尤为重要..没有它,就没有你的未来吧.. 下面将一些常用的JS语法给大家罗列出来.. 也给自己备份一下.. 以备不时之需.. 1.输出语句:document.write(&quo ...
- [转帖]开始使用Chronograf
地址:https://docs.influxdata.com/chronograf/v1.6/introduction/getting-started/ https://www.cnblogs.com ...
- YAPTCHA(HDU2973)【威尔逊定理】
威尔逊原理.即对于素数p,有(p-1)!=-1( mod p). 首先,将原式变形为[ (3×k+6)! % (3×k+7) + 1] / (3×k+7),所以: 1.3×k+7是素数,结果为1, 2 ...