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)分析数据成员 ...
随机推荐
- 数学建模python matlab 编程(指派问题)
指派授课问题 现有A.B.C.D四门课程,需由甲.乙.丙.丁四人讲授,并且规定: 每人只讲且必须讲1门课:每门课必须且只需1人讲. 四人分别讲每门课的费用示于表中: 课 费用 人 A B C D 甲 ...
- iptable和tcpdump的先后顺序
tcpdump是一个用来抓取linux网络数据包的工具,而iptables是linux上的防火墙工具,两者之间的顺序是: Wire -> NIC -> tcpdump -> netf ...
- 【Hadoop】Hadoop的数据压缩方式
概述 压缩技术能够有效减少底层存储系统(HDFS)读写字节数.压缩提高了网络带宽和磁盘空间的效率.在Hadoop下,尤其是数据规模很大和工作负载密集的情况下,使用数据压缩显得非常重要.在这种情况下 ...
- Gitlab-Runner基础教程
一.Intro jenkins和runner,作为主流自动化运维工具来说,两者的大思路其实是一样的,就是将我们提交到代码仓库的代码拉到jenkins或者runner运行的机器里,然后执行一系列的命令( ...
- 【POJ - 1703】Find them, Catch them(种类并查集)
Find them, Catch them 直接翻译了 Descriptions 警方决定捣毁两大犯罪团伙:龙帮和蛇帮,显然一个帮派至少有一人.该城有N个罪犯,编号从1至N(N<=100000. ...
- [Agc036C]Triangle_数学
Triangle 题目链接:https://atcoder.jp/contests/agc036/tasks/agc036_a 题解: 我开始的时候以为是$Millar-Rabin$加$Pollard ...
- 【转帖】刘备三顾茅庐,请Elasticsearch出山
刘备三顾茅庐,请Elasticsearch出山 2019-08-08 18:31 https://www.sohu.com/a/332454886_463994?spm=smpc.author.fd- ...
- sql server凭据
转自:https://blog.csdn.net/kk185800961/article/details/52469170 凭据是包含连接到 SQL Server 外部资源所需的身份验证信息(凭据)的 ...
- [转帖]PostgreSQL的用户、角色和权限管理
PostgreSQL的用户.角色和权限管理 2018年05月18日 14:02:29 jerry-89 阅读数 6143 https://blog.csdn.net/eagle89/article/d ...
- shell基础篇
1. Shell概述 为什么要学习Shell呢? 1)需要看懂运维人员编写的Shell程序. 2)偶尔会编写一些简单Shell程序来管理集群.提高开发效率. 2 .Shell解析器 (1)Linux提 ...