将xml文件作为一个小的数据库,进行学生的增删改查的简单实例
程序员文章站
2023-02-21 20:59:28
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文件作为一个小的数据库,进行学生的增删改查的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。