侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

将xml文件作为一个小的数据库,进行学生的增删改查的简单实例

数据库  /  管理员 发布于 7年前   248

1.xml文件:

<?xml version="1.0" encoding="UTF-8"?><Students> <student id="2">  <name>ttt</name>  <age>44</age> </student> <student id="3">  <name>linda2</name>  <age>22</age> </student> <student id="4">  <name>linda3</name>  <age>23</age> </student> <student id="5">  <name>jack</name>  <age>2</age> </student> <student id="1">   <name>yyh1</name>   <age>22</age> </student></Students>

2.Java代码

import java.io.File;import java.io.IOException;import java.util.Scanner;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.TransformerFactoryConfigurationError;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;import org.w3c.dom.Text;import org.xml.sax.SAXException;//在学生管理系统里面,学生的学号是唯一的,姓名有可能重复public class StudentManager {  public static void main(String[] args) {    try {      Document doc = Domutils.getDoc(new File("xml文件的相对路径"));      Scanner input = new Scanner(System.in);      System.out.println("欢迎来到学生管理系统\n\n\n请输入你要进行什么操作是:\n1.添加学生信息\n2.删除学生信息\n3.修改学生信息\n(请输入前边的序号)");      int num = input.nextInt();      if(num == 1) {        addStudent(doc);      }else if(num == 2) {        delStudent(doc);      }else if(num == 3) {        updStudent(doc);      }    } catch (SAXException e) {      e.printStackTrace();    } catch (IOException e) {      e.printStackTrace();    } catch (ParserConfigurationException e) {      e.printStackTrace();    }  }  //修改学生信息  private static void updStudent(Document doc) {    Element updStudent = null;    Scanner input = new Scanner(System.in);    System.out.println("请输入你要修改的学生的学号:");    String studentid = input.nextLine();    System.out.println("请输入新学生的姓名:");    String newName = input.nextLine();    System.out.println("请输入新学生的年龄:");    String newAge = input.nextLine();        //将每一个学生的列出来,for循环判断你要修改信息的学生是哪一个    NodeList list = doc.getElementsByTagName("student");    for(int i = 0; i <list.getLength(); i++) {      if(studentid.equals(list.item(i).getAttributes().getNamedItem("id").getNodeValue())){        updStudent = (Element) doc.getElementsByTagName("student").item(i).getFirstChild().getParentNode();        //对学生的name属性进行赋新值        updStudent.getElementsByTagName("name").item(i).getFirstChild().setNodeValue(newName);        //对学生的age 属性赋新值        updStudent.getElementsByTagName("age").item(i).getFirstChild().setNodeValue(newAge);              }else{        break;      }    }    //找出根元素,将修改后的元素持久化到文件    Element root = doc.getDocumentElement();    transform(root);    System.out.println(updStudent);  }  //删除学生信息  private static void delStudent(Document doc) {    Scanner input = new Scanner(System.in);    //输入你要删除的学生的 学号    System.out.println("请输入要删除学生的学号:");    String studentid = input.nextLine();    Element root = doc.getDocumentElement();        //将学生列成一个表,进行遍历,找对应学号的学生进行删除    NodeList list = doc.getElementsByTagName("student");    for(int i = 0; i < list.getLength(); i++) {    if((studentid).equals(list.item(i).getAttributes().getNamedItem("id").getNodeValue())){      Element delStudent = (Element) doc.getElementsByTagName("student").item(i).getFirstChild().getParentNode();         root.removeChild(delStudent);        break;      }else {        System.out.println("没有该学生");        break;      }    }    //持久化到文件    transform(root);  }    //添加学生信息  private static void addStudent(Document doc) {//    System.out.println(doc.getElementsByTagName("student").item(1).getAttributes().getNamedItem("id").getNodeValue());    Element root = doc.getDocumentElement();    //从控制台输入    Scanner input = new Scanner(System.in);    System.out.println("请输入学生的序号:id = ");         //将学生放到一个列表里面,看我们要添加的学生的学号里面是否已经有了,如果有,需要将新加入的学生的学号改一下    NodeList list = doc.getElementsByTagName("student");    String studentid = input.nextLine();    for(int i = 0; i < list.getLength(); i++) {      if(studentid.equals(list.item(i).getAttributes().getNamedItem("id").getNodeValue())){        System.out.println("该序号学生表里面已经存在,请重新输入一个新的序号:");         studentid = input.nextLine();      }else {        break;      }    }        System.out.println("请输入要添加学生的姓名:name = ");    String name_value = input.nextLine();    System.out.println("请输入要添加学生的年龄:age = ");    String age_value = input.nextLine();        //创建节点    Element student = doc.createElement("student");    Element name = doc.createElement("name");    Element age = doc.createElement("age");    Text namText = doc.createTextNode(name_value);    Text ageText = doc.createTextNode(age_value);    //关联节点之间的关系    root.appendChild(student);    student.appendChild(name);    student.appendChild(age);    student.setAttribute("id", studentid);    name.appendChild(namText);    age.appendChild(ageText);    //持久化到文件    transform(root);      }  //持久化到文件的方法  private static void transform(Element root)      throws TransformerFactoryConfigurationError {    TransformerFactory factory = TransformerFactory.newInstance();    try {      Transformer tf = factory.newTransformer();      tf.transform(new DOMSource(root), new StreamResult(new File("src/com/briup/dom/student.xml")));    } catch (TransformerConfigurationException e) {      e.printStackTrace();    } catch (TransformerException e) {      e.printStackTrace();    }  }}

2.Dom解析文件(将获取解析文件的部分封装起来)

import java.io.File;import java.io.IOException;import java.nio.file.attribute.AclEntry.Builder;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.xml.sax.SAXException;public class Domutils {  public static Document getDoc(File file) throws SAXException, IOException, ParserConfigurationException {      //获取工厂模式    DocumentBuilderFactory factory =         DocumentBuilderFactory.newInstance();        //获取builder对象      DocumentBuilder builder = factory.newDocumentBuilder();          //将要解析文件加载成一个树状文件,开始解析           Document document = builder.parse(file);    return document;  }}

以上这篇将xml文件作为一个小的数据库,进行学生的增删改查的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


  • 上一条:
    ajax结合mysql数据库和smarty实现局部数据状态的刷新方法
    下一条:
    mysql5的sql文件导入到mysql4的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 分库分表的目的、优缺点及具体实现方式介绍(0个评论)
    • DevDB - 在 VS 代码中直接访问数据库(0个评论)
    • 在ubuntu系统中实现mysql数据存储目录迁移流程步骤(0个评论)
    • 在mysql中使用存储过程批量新增测试数据流程步骤(0个评论)
    • php+mysql数据库批量根据条件快速更新、连表更新sql实现(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-06
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-05
    • 2018-10
    • 2018-11
    • 2020-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2021-02
    • 2021-04
    • 2021-07
    • 2021-08
    • 2021-11
    • 2021-12
    • 2022-02
    • 2022-03
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客