欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-26 09:53:36
1.xml文件: &...

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文件作为一个小的数据库,进行学生的增删改查的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。