将xml文件作为一个小的数据库,进行学生的增删改查
1.xml文件:
1<?xml version="1.0" encoding="UTF-8"?><Students>2<studentid="2">3<name>ttt</name>4<age>44</age>5</student>6<studentid="3">7<name>linda2</name>8<age>22</age>9</student>10<studentid="4">11<name>linda3</name>12<age>23</age>13</student>14<studentid="5">15<name>jack</name>16<age>2</age>17</student>18<studentid="1">19<name>yyh1</name>20<age>22</age>21</student>22</Students>
2.java代码
1importjava.io.File;2importjava.io.IOException;3importjava.util.Scanner;45importjavax.xml.parsers.ParserConfigurationException;6importjavax.xml.transform.Transformer;7importjavax.xml.transform.TransformerConfigurationException;8importjavax.xml.transform.TransformerException;9importjavax.xml.transform.TransformerFactory;10importjavax.xml.transform.TransformerFactoryConfigurationError;11importjavax.xml.transform.dom.DOMSource;12importjavax.xml.transform.stream.StreamResult;1314importorg.w3c.dom.Document;15importorg.w3c.dom.Element;16importorg.w3c.dom.NodeList;17importorg.w3c.dom.Text;18importorg.xml.sax.SAXException;1920//在学生管理系统里面,学生的学号是唯一的,姓名有可能重复21publicclassStudentManager {22publicstaticvoidmain(String[] args) {23try{24Document doc = Domutils.getDoc(newFile("xml文件的相对路径"));25Scanner input =newScanner(System.in);26System.out.PRintln("欢迎来到学生管理系统\n\n\n请输入你要进行什么操作是:\n1.添加学生信息\n2.删除学生信息\n3.修改学生信息\n(请输入前边的序号)");27intnum =input.nextInt();28if(num == 1) {29addStudent(doc);30}elseif(num == 2) {31delStudent(doc);32}elseif(num == 3) {33updStudent(doc);34}35}catch(SAXException e) {36e.printStackTrace();37}catch(IOException e) {38e.printStackTrace();39}catch(ParserConfigurationException e) {40e.printStackTrace();41}42}43//修改学生信息44privatestaticvoidupdStudent(Document doc) {45Element updStudent =null;46Scanner input =newScanner(System.in);47System.out.println("请输入你要修改的学生的学号:");48String studentid =input.nextLine();49System.out.println("请输入新学生的姓名:");50String newName =input.nextLine();51System.out.println("请输入新学生的年龄:");52String newAge =input.nextLine();5354//将每一个学生的列出来,for循环判断你要修改信息的学生是哪一个55NodeList list = doc.getElementsByTagName("student");56for(inti = 0; i <list.getLength(); i++) {57if(studentid.equals(list.item(i).getAttributes().getNamedItem("id").getNodeValue())){58updStudent = (Element) doc.getElementsByTagName("student").item(i).getFirstChild().getParentNode();59//对学生的name属性进行赋新值60updStudent.getElementsByTagName("name").item(i).getFirstChild().setNodeValue(newName);61//对学生的age 属性赋新值62updStudent.getElementsByTagName("age").item(i).getFirstChild().setNodeValue(newAge);6364}else{65
break;66}67}68//找出根元素,将修改后的元素持久化到文件69Element root =doc.getDocumentElement();70transform(root);71System.out.println(updStudent);72}73//删除学生信息74privatestaticvoiddelStudent(Document doc) {75Scanner input =newScanner(System.in);76//输入你要删除的学生的 学号77System.out.println("请输入要删除学生的学号:");78String studentid =input.nextLine();79Element root =doc.getDocumentElement();8081//将学生列成一个表,进行遍历,找对应学号的学生进行删除82NodeList list = doc.getElementsByTagName("student");83for(inti = 0; i < list.getLength(); i++) {84if((studentid).equals(list.item(i).getAttributes().getNamedItem("id").getNodeValue())){85Element delStudent = (Element) doc.getElementsByTagName("student").item(i).getFirstChild().getParentNode();87root.removeChild(delStudent);88
break;89}else{90System.out.println("没有该学生");91
break;92}93}94//持久化到文件95transform(root);96}9798//添加学生信息99privatestaticvoidaddStudent(Document doc) {100//System.out.println(doc.getElementsByTagName("student").item(1).getAttributes().getNamedItem("id").getNodeValue());101Element root =doc.getDocumentElement();102//从控制台输入103Scanner input =newScanner(System.in);104System.out.println("请输入学生的序号:id = ");105106//将学生放到一个列表里面,看我们要添加的学生的学号里面是否已经有了,如果有,需要将新加入的学生的学号改一下107NodeList list = doc.getElementsByTagName("student");108String studentid =input.nextLine();109for(inti = 0; i < list.getLength(); i++) {110if(studentid.equals(list.item(i).getAttributes().getNamedItem("id").getNodeValue())){111System.out.println("该序号学生表里面已经存在,请重新输入一个新的序号:");112studentid =input.nextLine();113}else{114
break;115}116}117118System.out.println("请输入要添加学生的姓名:name = ");119String name_value =input.nextLine();120System.out.println("请输入要添加学生的年龄:age = ");121String age_value =input.nextLine();122123//创建节点124Element student = doc.createElement("student");125Element name = doc.createElement("name");126Element age = doc.createElement("age");127Text namText =doc.createTextNode(name_value);128Text ageText =doc.createTextNode(age_value);129//关联节点之间的关系130root.appendChild(student);131student.appendChild(name);132student.appendChild(age);133student.setAttribute("id", studentid);134name.appendChild(namText);135age.appendChild(ageText);136//持久化到文件137transform(root);138139}140//持久化到文件的方法141privatestaticvoidtransform(Element root)142throwsTransformerFactoryConfigurationError {143TransformerFactory factory =TransformerFactory.newInstance();144try{145Transformer tf =factory.newTransformer();146tf.transform(newDOMSource(root),newStreamResult(newFile("src/com/briup/dom/student.xml")));147}catch(TransformerConfigurationException e) {148e.printStackTrace();149}catch(TransformerException e) {150e.printStackTrace();151}152}153}
2.Dom解析文件(将获取解析文件的部分封装起来)
importjava.io.File;importjava.io.IOException;importjava.nio.file.attribute.AclEntry.Builder;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.ParserConfigurationException;importorg.w3c.dom.Document;importorg.xml.sax.SAXException;publicclassDomutils {publicstaticDocument getDoc(File file)throwsSAXException, IOException, ParserConfigurationException {
//获取工厂模式
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//获取builder对象
DocumentBuilder builder=factory.newDocumentBuilder();
//将要解析文件加载成一个树状文件,开始解析
Document document=builder.parse(file);returndocument;
}
}