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-sympy科学计算与数据处理(方程,微分,微分方程,积分)
方程 a,b,c,x = symbols("a b c x") my_eq = Eq(a*x**2+b*x+c,0) solve(my_eq,x) Out[12]: [(-b + ...
- ElasticSearch——分词
前言: 最近在使用elasticSearch中发现有些数据查不出来,于是研究了一下,发现是分词导致的,现梳理并总结一下. ElasticSearch 5.0以后,string类型有重大变更,移除了st ...
- Java集合(0):概述
下面是一个Java集合的简化图,我们可以看出,集合分Collection和Map两大部分: 接下来分别以下面几个章节介绍Java集合: Java集合(1):Collections工具类中的static ...
- Java数据结构之TreeMap
一.源码注释 /** * TreeMap基于NavigableMap 的一个红黑树的实现.TreeMap会根据比较器comparator对键值对的key进行比较进行排序,如果没有比较器就是用key的自 ...
- 【CSS】我的颜色到底听谁的?—— css的层叠性
我们之前学了很多个选择器,都可以帮我们定位到具体标签上,然后我们在设置样式.但这也不可避免会产生一个问题:如果多个选择器同时指向同一个标签,那么到底该听谁的??? css一定有自己的机制来处理这个问题 ...
- 架构模式:API组合
架构模式: API组合 上下文 您已应用微服务架构模式和每服务数据库模式.因此,实现从多个服务连接数据的查询不再是直截了当的. 问题 如何在微服务架构中实现查询? 结论 通过定义API Compose ...
- 云计算openstack核心组件--glance-镜像服务(6)
glance做什么 OpenStack 由 Glance 提供 Image 服务 获取镜像位置 https://docs.openstack.org/image-guide/obtain-images ...
- Hadoop部署(伪分布式系统)
hadoop安装 #修改主机名 hostnamectl set-hostname hadoop #修改hosts vim /etc/hosts #追加到末尾 10.0.0.11 hadoop 安装必备 ...
- go语言开启go module
export GO111MODULE=on //linux .MAC set GO111MODULE=on //Windows
- spring-boot 几个工具类(七)
环境 jdk 6 tomcat 6.0.53 sts 4.4.2 maven 3.2.5 mysql 5.7 SpringContextHolder SpringContextHolder 可以很方便 ...